在下面的 PL/SQL Proc 中得到不正确的输出
Getting incorrect output in below PL/SQL Proc
CREATE OR REPLACE PROCEDURE Proc_TEST(T_DATE DATE DEFAULT TRUNC(SYSDATE))
AS
PREV1 VARCHAR(20);
mnth VARCHAR(20);
BEGIN
SELECT TO_CHAR(TO_DATE(TRUNC(T_DATE,'MM')-1),'MON_YYYY') INTO PREV1 FROM DUAL;
FOR i IN 1 .. 3 LOOP
mnth:='PREV'||i;
DBMS_OUTPUT.PUT_LINE('op'||mnth);
DBMS_OUTPUT.PUT_LINE('op'||PREV1);
END LOOP;
END;
/
我得到的输出是
opPREV1
opSEP_2015
而我必须得到
opSEP_2015
opSEP_2015
。
您不能通过连接一些字符串来创建变量标识符,字符串文字充当字符串而不是具有相同拼写的标识符!
您可以使用 VARRAY
作为固定大小的数组:
declare
type array_t is varray(3) of varchar2(10);
array array_t := array_t('Matt', 'Joanne', 'Robert');
begin
for i in 1..array.count loop
dbms_output.put_line(array(i));
end loop;
end;
或 TABLE
对于无界数组:
...
type array_t is table of varchar2(10);
...
这里的"table"这个词跟数据库表一点关系都没有,容易混淆。这两种方法都会创建内存数组。
CREATE OR REPLACE PROCEDURE Proc_TEST(T_DATE DATE DEFAULT TRUNC(SYSDATE))
AS
PREV1 VARCHAR(20);
mnth VARCHAR(20);
BEGIN
SELECT TO_CHAR(TO_DATE(TRUNC(T_DATE,'MM')-1),'MON_YYYY') INTO PREV1 FROM DUAL;
FOR i IN 1 .. 3 LOOP
mnth:='PREV'||i;
DBMS_OUTPUT.PUT_LINE('op'||mnth);
DBMS_OUTPUT.PUT_LINE('op'||PREV1);
END LOOP;
END;
/
我得到的输出是
opPREV1
opSEP_2015
而我必须得到
opSEP_2015
opSEP_2015
。
您不能通过连接一些字符串来创建变量标识符,字符串文字充当字符串而不是具有相同拼写的标识符!
您可以使用 VARRAY
作为固定大小的数组:
declare
type array_t is varray(3) of varchar2(10);
array array_t := array_t('Matt', 'Joanne', 'Robert');
begin
for i in 1..array.count loop
dbms_output.put_line(array(i));
end loop;
end;
或 TABLE
对于无界数组:
...
type array_t is table of varchar2(10);
...
这里的"table"这个词跟数据库表一点关系都没有,容易混淆。这两种方法都会创建内存数组。