首页 > 解决方案 > ORA-01008: 并非所有变量都绑定 - “并非所有变量都绑定”

问题描述

这是我的 plsql 块,动态 SQL。我找不到为什么会出现错误“没有 ORA-01008:并非所有变量都绑定 ORA-06512:在第 23 行”的原因。

我在 EXECUTE IMMEDIATE 语句中找不到错误。

 DECLARE
      form_name      VARCHAR2(225) := 'MUST AS';
      ad_no          VARCHAR2(225) := :ad_no;
      sql_stmt       VARCHAR2(4000);
      sql_output     VARCHAR2(4000);
      db_table       VARCHAR(225) := inp_reminder_pkg.form_db_table(form_name);
      col_id         VARCHAR(225) := inp_reminder_pkg.get_col_id(form_name);
    BEGIN
      sql_stmt := '
            SELECT :1
              FROM @tableName
             WHERE advno = :2
               AND created = ( SELECT MAX(CREATED)
                                 FROM @tableName
                                WHERE advno = :2 )'
      ;
      sql_stmt := replace(sql_stmt, '@tableName', db_table);
    
      EXECUTE IMMEDIATE sql_stmt
      INTO sql_output
        USING  col_id, ad_no;

      dbms_output.put_line(sql_output);

    EXCEPTION
      WHEN no_data_found THEN

        dbms_output.put_line('no-data');
    END;

让我知道我错过了什么。感谢您

标签: oracleplsqldynamic-sqlexecute-immediatebind-variables

解决方案


有三个绑定变量(即使两个具有相同的名称),您需要在execute immediate语句中为它们发送 3 个参数。

请注意,您可能并不意味着将列名作为绑定变量输入,如果您想选择变量列,则必须动态执行此操作。


推荐阅读