Oracle PLSQL变量不由给定值赋值

Oracle PLSQL变量不由给定值赋值,oracle,plsql,Oracle,Plsql,我试图将一个表类型变量的值赋给一个varchar2类型的表 CREATE OR REPLACE PACKAGE BODY TEST_SYS IS TYPE line_table IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER; PROCEDURE test( val_ OUT VARCHAR2) IS temp_val VARCHAR2(4000); svalues_ line_Table; BEGIN

我试图将一个表类型变量的值赋给一个varchar2类型的表

CREATE OR REPLACE PACKAGE BODY TEST_SYS IS
   TYPE line_table IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;

PROCEDURE test(
   val_ OUT VARCHAR2)
IS
   temp_val    VARCHAR2(4000);
   svalues_    line_Table;
BEGIN
   svalues_(1) := '! -$FILE_LINE=EXT01;2017-01;2017-
   12;JJ01;;4021;;;;;;;;;;;;USD;;;;;;;;1000;1000;; -';

   temp_val := svalues_(1);
   val_ := temp_val;
END test;

END TEST_SYS
下面的语句中似乎没有赋值。有人对此有线索吗

temp_val := svalues_(1);

此示例仅适用于问题复制,可能不是逻辑上增强的。仅了解问题。

前提是您有一个带有代码的软件包测试系统:

CREATE OR REPLACE PACKAGE TEST_SYS IS
  PROCEDURE test( val_ OUT VARCHAR2);
END TEST_SYS;
和包体:

CREATE OR REPLACE PACKAGE BODY TEST_SYS IS
 TYPE line_table IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;

PROCEDURE test( val_ OUT VARCHAR2) IS
   temp_val    varchar2(4000);
   svalues_    line_Table;
BEGIN
   svalues_(1) := '! -$FILE_LINE=EXT01;2017-01;2017-12;JJ01;;4021;;;;;;;;;;;;USD;;;;;;;;1000;1000;; -';

   temp_val := svalues_(1);
   val_ := temp_val;
   dbms_output.put_line(val_);
END test;

END TEST_SYS;
和调用过程测试,您将能够得到如下结果:

SQL> set serveroutput on;
SQL> var str varchar2(4000);
SQL> exec test_sys.test(:str);

PL/SQL procedure successfully completed
str
---------
! -$FILE_LINE=EXT01;2017-01;2017-12;JJ01;;4021;;;;;;;;;;;;USD;;;;;;;;1000;1000;; -