PLSQL变量未按给定值

时间:2018-02-15 04:20:59

标签: 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
   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);

此示例仅用于问题复制,可能不是逻辑上增强的一个。只是为了理解这个问题。

1 个答案:

答案 0 :(得分:1)

如果您的软件包test_sys包含代码:

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;

并致电程序test,您将能够获得如下结果:

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;; -