Z-ORA-01745:无效的主机/绑定变量名 (PLSQL)

Posted

技术标签:

【中文标题】Z-ORA-01745:无效的主机/绑定变量名 (PLSQL)【英文标题】:Z-ORA-01745: invalid host/bind variable name (PLSQL) 【发布时间】:2018-07-30 09:03:07 【问题描述】:

我对 plsql 中的动态变量有点新意。 我在 EXECUTE IMMEDIATE 上收到错误“无效的主机/绑定变量名” 陈述。提前致谢。

CREATE OR REPLACE PROCEDURE MY_CLASS_CONFIG_DML (pBuCode     VARCHAR2,
                                                 pMyPKId     VARCHAR2,
                                                 pMyName     VARCHAR2,
                                                 pMyId       VARCHAR2,
                                                 pRemarks    VARCHAR2,
                                                 pUserId     VARCHAR2)
AS
    v_table      VARCHAR2 (50);
    v_lastdate   DATE;
    --bindable var.
    v_pkey       VARCHAR2 (12) := pMyPKId;
    v_myname     VARCHAR2 (30) := pMyName;
    v_bucode     VARCHAR2 (4) := pBuCode;
    v_myid       VARCHAR2 (12) := pMyId;
    v_remarks    VARCHAR2 (50) := pRemarks;
    v_lastid     VARCHAR2 (8) := pUserId;
BEGIN
    v_lastdate := SYSDATE;
    v_table := v_bucode || '_WORKSHEET_CONFIG';

    --Error happens on this part
    EXECUTE IMMEDIATE
           'insert into '
        || v_table
        || '(pk_id,my_name,my_id,remarks,last_user,last_date)
      values(:pkey,:myname,:myid,:remarks,:user,:lastdate)'
        USING v_pkey,
              v_myname,
              v_myid,
              v_remarks,
              v_lastid,
              v_lastdate;

    --end comment
    COMMIT;
    RETURN;
EXCEPTION
    WHEN OTHERS
    THEN
        ROLLBACK;
END MY_CLASS_CONFIG_DML;

【问题讨论】:

您在绑定变量列表中传入v_lastdate,但您尚未在声明部分声明 v_lastdate。这可能(将会!)是一个问题...... @Boneist,谢谢,已经添加了它,但是我仍然收到无效的主机/绑定错误。 Execute Immediate 语句有什么格式吗? 顺便说一句,异常隐藏器似乎没有帮助。如果insert 不起作用,有什么可以回滚的?如果它由于空间不足或损坏的索引块或其他原因而失败,您是否不想升级它,而不是默默地撤消自上次提交以来在会话中所做的所有事情? @WilliamRobertson Robertson 感谢您提供的信息,我想我明白了。祝你有美好的一天! 在我用自己的演示表名称对其进行硬编码之后,该代码对我有用。重现该行为的简单演示会有所帮助(在创建它时,您甚至可能自己发现问题)。 【参考方案1】:

:user 替换为另一个关键字::myuser:lastid。冒号应该可以使用保留关键字“user”,但这是我看到的唯一问题。

【讨论】:

以上是关于Z-ORA-01745:无效的主机/绑定变量名 (PLSQL)的主要内容,如果未能解决你的问题,请参考以下文章

Cause: java.sql.SQLSyntaxErrorException: ORA-01745::无效的主机/绑定变量名

Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名

SQL state [72000]; error code [1013]; ORA-03111: 通信通道收到中断; java.sql.SQLException: ORA-01745: 无效的主机/绑

Bad Request (Invalid Hostname) 是啥意思

arcgis10注册时,提示“无效主机名”怎么办啊?

Grapevine 远程连接错误请求 - 主机名无效