我编写了下面的PLSQL块。然而,当我执行它时,我会得到以下错误。请告诉我如何将DBMS_SQL中的嵌套表传递给
执行并生成报告。我们可以使用DBMS_SQL传递数组值来绑定参数吗?否则,我们是否只需要使用立即执行。我们使用DBMS_SQL生成所有报告。
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;
/
谢谢
发布于 2022-02-09 06:33:53
您必须使用预定义的类型之一,例如DBMS_SQL.varchar2_table
,请参阅标量和LOB集合的类型。
不可能使用您自己的TYPE T_bin_type IS TABLE OF VARCHAR2(25)
A_bin_type DBMS_SQL.varchar2_table;
BEGIN
A_bin_type(1) := 'R';
A_bin_type(2) := 'P';
https://stackoverflow.com/questions/71044712
复制相似问题