在PL / SQL Proc下面输出错误的输出

时间:2015-10-06 15:17:42

标签: database plsql procedures

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

1 个答案:

答案 0 :(得分:0)

你不能通过连接一些字符串来创建变量标识符,字符串文字充当字符串而不是具有相同拼写的标识符!

您可以将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);
...

这里的“表”一词与数据库表无关,令人困惑。这两种方法都创建了内存数组。