首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态SQL: ORA-00925和ORA-06512

动态SQL: ORA-00925和ORA-06512
EN

Stack Overflow用户
提问于 2014-03-28 14:48:12
回答 2查看 1.6K关注 0票数 0

这段代码没有任何意义,只是为了训练。但是这里有这样的错误,当调用它时:

代码语言:javascript
复制
EXEC ADD_ROW( 'fds', 'hgd', '243-650-215', 2);

1 ORA-00925:缺少关键字ORA-06512: at "MYDB.ADD_ROW",第8行ORA-06512: at第2行Procedure:MYDB.ADD_ROW(MyDB@localhost:ORCL) 8 1

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE MYDB.add_row(
  v1 IN CLIENT.FNAME%TYPE, v2 IN CLIENT.LNAME%TYPE, v3 IN CLIENT.DOC_ID%TYPE, v4 IN CLIENT.BENEFIT_ID%TYPE)
  IS
  sql_stmnt VARCHAR(200);
  tab_name VARCHAR2(20) := 'CLIENT';
  BEGIN
    sql_stmnt := 'INSERT INTO' || tab_name ||  'VALUES(100, :1,:2,:3,:4)';
    EXECUTE IMMEDIATE sql_stmnt USING  v1, v2, v3, v4;
  END;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-28 14:50:22

我想你只是失去了一个空间,不管是哪一边:' || tab_name || '

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE MYDB.add_row(
  v1 IN CLIENT.FNAME%TYPE, v2 IN CLIENT.LNAME%TYPE, v3 IN CLIENT.DOC_ID%TYPE, v4 IN CLIENT.BENEFIT_ID%TYPE)
  IS
  sql_stmnt VARCHAR(200);
  tab_name VARCHAR2(20) := 'CLIENT';
  BEGIN
    sql_stmnt := 'INSERT INTO ' || tab_name ||  ' VALUES(100, :1,:2,:3,:4)';
    EXECUTE IMMEDIATE sql_stmnt USING  v1, v2, v3, v4;
  END;
票数 1
EN

Stack Overflow用户

发布于 2014-03-28 14:50:45

您的表名周围缺少空格。此代码将生成表单INSERT INTOmy_tableVALUES(100, :1,:2,:3,:4)的SQL。

只需修改sql生成:

代码语言:javascript
复制
sql_stmnt := 'INSERT INTO ' || tab_name ||  ' VALUES(100, :1,:2,:3,:4)';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22716093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档