首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle调用DBMS_SQL中“DBMS_SQL”的错误数目或参数类型

Oracle调用DBMS_SQL中“DBMS_SQL”的错误数目或参数类型
EN

Stack Overflow用户
提问于 2022-02-09 06:05:25
回答 1查看 20关注 0票数 0

我编写了下面的PLSQL块。然而,当我执行它时,我会得到以下错误。请告诉我如何将DBMS_SQL中的嵌套表传递给

执行并生成报告。我们可以使用DBMS_SQL传递数组值来绑定参数吗?否则,我们是否只需要使用立即执行。我们使用DBMS_SQL生成所有报告。

代码语言:javascript
运行
复制
Error report -
ORA-06550: line 34, column 2:
PLS-00306: wrong number or types of arguments in call to 'BIND_ARRAY'
ORA-06550: line 34, column 2:
PL/SQL: Statement ignored
ORA-06550: line 35, column 2:
PLS-00306: wrong number or types of arguments in call to 'BIND_ARRAY'
ORA-06550: line 35, column 2:

declare

 l_cursor number := dbms_sql.open_cursor;
 l_ignore number;
 q varchar2(32000);
 o_desc_tab  DBMS_SQL.desc_tab;
 l_col_cnt number(10);
 l_val            VARCHAR2 (32767);
 l_rec_no NUMBER;
 l_col_sep VARCHAR2(25) := ',';
 l_text               VARCHAR2 (32767);
 l_value              VARCHAR2 (4000);
 TYPE T_dc_code IS TABLE OF VARCHAR2(25);
 A_dc_code T_dc_code;
  TYPE T_bin_type IS TABLE OF VARCHAR2(25);
 A_bin_type T_bin_type;
begin
q :='select col1, col2, col3, col4
     from tabl1 wbm
          inner join table2 wam
          on wbm.dc_code=wam.dc_code
          and wbm.dc_area=wam.dc_area
    where wbm.dc_code  MEMBER OF :P_DC_CODE
     and wbm.BIN_TYPE MEMBER OF :P_BIN_TYPE
    )';
   
   dbms_sql.parse( l_cursor,q,dbms_sql.native );
  A_dc_code.EXTEND(2);
  A_dc_code(1) := '888';
  A_dc_code(2) := '902';
    A_bin_type.EXTEND(2);
 A_bin_type(1) := 'R';
 A_bin_type(2) := 'P';
 dbms_sql.bind_array( l_cursor, ':P_DC_CODE', A_bin_type );
 dbms_sql.bind_array( l_cursor, ':P_BIN_TYPE', A_dc_code );
 
 DBMS_SQL.describe_columns (l_cursor, l_col_cnt, o_desc_tab);

 FOR l_cl_cnt IN 1 .. o_desc_tab.COUNT
 LOOP
 DBMS_SQL.define_column (l_cursor, l_cl_cnt, l_val, 32767);
 END LOOP; 

 l_ignore := dbms_sql.execute( l_cursor );  
 
 WHILE (DBMS_SQL.fetch_rows (l_cursor) > 0)
            LOOP            
             DBMS_OUTPUT.PUT_LINE('COMING IN LOOP');
                FOR l_rec_no IN 1 .. o_desc_tab.COUNT
                   LOOP
                      DBMS_SQL.COLUMN_VALUE (l_cursor, l_rec_no, l_value);
                      l_text := l_text || l_col_sep || l_value;            
                END LOOP;
            END LOOP;
  dbms_sql.close_cursor( l_cursor );            
 DBMS_OUTPUT.PUT_LINE('THE VALUE IS ---- '||l_text);           
end;
/

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-02-09 06:33:53

您必须使用预定义的类型之一,例如DBMS_SQL.varchar2_table,请参阅标量和LOB集合的类型

不可能使用您自己的TYPE T_bin_type IS TABLE OF VARCHAR2(25)

代码语言:javascript
运行
复制
   A_bin_type DBMS_SQL.varchar2_table;

BEGIN

   A_bin_type(1) := 'R';
   A_bin_type(2) := 'P';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71044712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档