这是动态sql的第三种
你需要在dbms_sql.execute之前
DBMS_SQL.DEFINE_COLUMN
然后在dbms_sql.execute之后
DBMS_SQL.COLUMN_VALUE具体请去察看相应的oracle文档
你需要在dbms_sql.execute之前
DBMS_SQL.DEFINE_COLUMN
然后在dbms_sql.execute之后
DBMS_SQL.COLUMN_VALUE具体请去察看相应的oracle文档
dbms_sql.parse(cursor_name,v_sqlquery,dbms_sql);
改为
dbms_sql.parse(cursor_name,v_sqlquery,dbms_sql.native);
table_name := 'T' || LTRIM(TO_CHAR( bbbh, v_format ));
sqlcmd := 'SELECT COUNT(*) FROM tabs WHERE TABLE_NAME=:TBNAME';
DBMS_SQL.PARSE( nSQL, sqlcmd, DBMS_SQL.v7 ) ;
DBMS_SQL.BIND_VARIABLE( nSQL, ':TBNAME', table_name ) ;
DBMS_SQL.DEFINE_COLUMN( nSQL, 1, my_count ) ;
ret := DBMS_SQL.EXECUTE( nSQL ) ;
LOOP
IF DBMS_SQL.FETCH_ROWS( nSQL ) = 0 THEN
EXIT;
END IF;
DBMS_SQL.COLUMN_VALUE( nSQL, 1, my_count ) ;
END LOOP;
EXCEPTION
when others then
DBMS_SQL.CLOSE_CURSOR(nSQL);
raise_application_error( -20514, sqlerrm );
END;
DBMS_SQL.CLOSE_CURSOR(nSQL);
这句话要防在循环外面
cursor_name:=dbms_sql.open_cursor;
LOOP
dbms_sql.parse(cursor_name,v_sqlquery,DBMS_SQL.v7);DBMS_SQL.v7加上个。V7