转自http://www.itpub.net/home.php?mod=space&uid=86208&do=thread&view=me&type=thread&order=dateline&from=space&page=1 感谢newkid
原始出处: http://www.plsqlchallenge.com/ 作者:Steven Feuerstein 运行环境:SQLPLUS, SERVEROUTPUT已打开 股票交易的标准单位是100股,有时候股票的销售报表是以100股作售出单位的。因此,一个销售数字123实际上代表着123个100股的销售单位,即12,300股。 哪些选项实现了一个过程,使得下列代码块执行之后会显示"12,300" ? BEGIN plch_show_stocks_sold (123); END; / (A) CREATE OR REPLACE PROCEDURE plch_show_stocks_sold (units_in IN INTEGER) IS BEGIN DBMS_OUTPUT.put_line (TO_CHAR (units_in, 'FM999G9V99')); END; / (B) CREATE OR REPLACE PROCEDURE plch_show_stocks_sold (units_in IN INTEGER) IS BEGIN DBMS_OUTPUT.put_line (TO_CHAR (units_in * 100, 'FM999G999')); END; / (C) CREATE OR REPLACE PROCEDURE plch_show_stocks_sold (units_in IN INTEGER) IS BEGIN DBMS_OUTPUT.put_line (TO_CHAR (units_in * 100, 'FM999999')); END; / (D) CREATE OR REPLACE PROCEDURE plch_show_stocks_sold (units_in IN INTEGER) IS BEGIN DBMS_OUTPUT.put_line (TO_CHAR (units_in, 'FM999G999')); END; /
A: 这个选项正确使用了G和V格式元素来输出所需的字符串。我们最感兴趣的是V元素,它返回了一个10的n倍的值,n是由V后面的9的个数确定的。 B: 这个选项没有使用V元素这种“花哨”的方法。它仅仅是把值乘以100,然后用G元素来确保字符串的恰当位置会出现一个"," C: 这个选项会显示"12300" ——没有逗号。但是题目要求有逗号,所以这个选项不正确。 D: 这个选项没有乘以100或者用V元素,所以它仅仅显示"123"
V 999V99 Returns a value multiplied by 10n (and if necessary, round it up), where n is the number of 9's after the V. V后面n个9 X*10^n G 9G999 Returns in the specified position the group separator (the current value of the NLS_NUMERIC_CHARACTER parameter). You can specify multiple group separators in a number format model. Restriction: A group separator cannot appear to the right of a decimal character or period in a number format model.
99999里里面的G用,代替
这些例子应该能说明了。
select TO_CHAR (10000, 'FM9g9999g') from dual union all select TO_CHAR (10000, 'FM9g99g') from dual union all select TO_CHAR (10000, 'FM9g9999999g999999') from dual union all select TO_CHAR (10000, 'FM9g9999999g999') from dual union all select TO_CHAR (10000, 'FM9g99g99999g99g9') from dual union all select TO_CHAR (10000, 'FM9g99gv99') from dual union all select TO_CHAR (10000, 'FM9g9999gv99') from dual