这段代码不起作用,但我不知道原因:
set serveroutput on buffer 2560000
declare
requete varchar2(4000);
name_firm varchar2(35);
curseur_ref number;
response number;
begin
curseur_ref := dbms_sql.open_cursor;
requete := 'SELECT trim(myTable.myColumn) from myTable';
dbms_sql.parse(curseur_ref, requete, dbms_sql.native);
dbms_sql.define_column(curseur_ref, 1, name_firm, 35);
response := dbms_sql.execute(curseur_ref);
dbms_sql.column_value(curseur_ref, 1, name_firm);
dbms_output.put_line('NB enregs : ' || dbms_sql.fetch_rows(curseur_ref));
dbms_output.put_line('name_firm : ' || name_firm);
dbms_sql.close_cursor(curseur_ref);
end;
没有plsql错误
结果是:
NB enregs:1(它找到一个......这是正确的)
name_firm:'除了名称之外什么都没有'
请求很好,因为我可以单独发送并拥有公司名称
发生了什么事?
感谢您的回答
注意:事情就是我看到这段代码工作了一次......
答案 0 :(得分:0)
你的column_value
电话在错误的地方;它需要在获取之后:
...
response := dbms_sql.execute(curseur_ref);
-- dbms_sql.column_value(curseur_ref, 1, name_firm);
dbms_output.put_line('NB enregs : ' || dbms_sql.fetch_rows(curseur_ref));
dbms_sql.column_value(curseur_ref, 1, name_firm);
dbms_output.put_line('name_firm : ' || name_firm);
...
给出了:
NB enregs : 1
name_firm : some val
调用COLUMN_VALUE过程或COLUMN_VALUE_LONG过程以确定FETCH_ROWS函数检索的列的值 为您的查询
它也显示在their third example。
我能看到你过去工作的唯一方法就是它曾经是一个循环获取多行,在这种情况下你会看到第一行和前一行的空值其余的价值。
当然,没有必要为此使用动态SQL,但我认为这是一个用于演示此问题的精简示例。