0

这段代码不起作用,但我不知道为什么:

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 : '除了名字什么都没有'

这个要求很好,因为我可以单独发送并且有公司的名称

到底是怎么回事?

谢谢你的回答

注意:问题是我看到这段代码工作过一次......

4

1 回答 1

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 函数为您的查询检索到的列的值

他们的第三个示例中也显示了这一点。

我能看到你在过去看到它工作的唯一方法是,如果它曾经在一个循环中获取多行,在这种情况下,你会看到第一行的空值和前一行的值休息。

当然,没有必要为此使用动态 SQL,但我认为这是一个简化的示例来演示该问题。

于 2013-07-30T16:25:19.967 回答