Oracle 如何运行该过程
我试图运行上面的语句,但它抛出了下面提到的错误Oracle 如何运行该过程,oracle,stored-procedures,Oracle,Stored Procedures,我试图运行上面的语句,但它抛出了下面提到的错误 exec home_lending_cus('9999999999', 'HOME LENDING', '11111111') varchar2类型的所有变量 ORA-00933: SQL Command not properly ended. ORA-06512: at 'HOME_LENDING_CUS', line 6 ORA-06512: at line1 正如@Aramillo指出的,字符串变量周围的引号是错误的,这使得动态SQL无法
exec home_lending_cus('9999999999', 'HOME LENDING', '11111111')
varchar2类型的所有变量
ORA-00933: SQL Command not properly ended.
ORA-06512: at 'HOME_LENDING_CUS', line 6
ORA-06512: at line1
正如@Aramillo指出的,字符串变量周围的引号是错误的,这使得动态SQL无法工作。然而,我强烈建议转移到绑定变量,而不是串联。这不仅可以防止此类错误,还可以防止SQL注入:
CREATE OR REPLACE PROCEDURE home_lending_cus(
id_no VARCHAR2,
prod_nme VARCHAR2,
rpt_dte NUMBER) authid current_user
AS
BEGIN
EXECUTE immediate
' CREATE TABLE abc AS
SELECT bt.id,
ct.cus_id
FROM bnkr_tbl bt ,
cus_tbl ct ,
base_tbl bt
WHERE bt.id =ct.id
AND ct.id =bt.c_id
AND bt.pr_nme='||prod_nme|| '
AND bt.dte ='||rpt_dte|| '
AND bt.id ='||id_no|| '
GROUP BY bt.id,
ct.cus_id';
END home_lending_cus;
或者,更确切地说,如果允许您在DDL中使用绑定变量,则会出现这种情况。鉴于这一限制,我倾向于将其分为两个命令
CREATE OR REPLACE PROCEDURE home_lending_cus(
id_no VARCHAR2,
prod_nme VARCHAR2,
rpt_dte NUMBER) authid current_user
AS
BEGIN
EXECUTE immediate
' CREATE TABLE abc AS
SELECT bt.id,
ct.cus_id
FROM bnkr_tbl bt ,
cus_tbl ct ,
base_tbl bt
WHERE bt.id =ct.id
AND ct.id =bt.c_id
AND bt.pr_nme= :1
AND bt.dte = :2
AND bt.id = :3
GROUP BY bt.id,
ct.cus_id' using prod_nme, rpt_dte, id_no;
END home_lending_cus;
这段代码还有几个其他问题需要考虑:
您的查询也无效,因为您在同一FROM
子句中使用别名bt
两次
我建议使用SQL-99样式的联接,而不是逗号分隔的表列表
动态创建表的Oracle代码总是有点可疑。您真的需要创建表,还是可以使用全局临时表?后者几乎总是更好的选择
您尝试在哪个上下文/应用程序中执行该过程?可能只是缺少一个这意味着您的PL/SQL代码中存在语法错误。您尚未发布源代码,因此我们无法告诉您它是什么。但是,消息中包含行号,因此您可以确切地知道要查找的位置。源代码在这里创建或替换过程home\u lending\u cus(id\u no varchar2,prod\u nme varchar2,rpt\u dte NUMBER)authid current\u user as begin execute immediate“create table abc as select bt.id,ct.cus\u id from bnkr\u tbl bt,cus\u tbl ct,base|tbl bt,其中bt.id=ct.id和ct.id=bt.c|u id和bt.pr|nme='| prod|nme |和bt.dte='| rpt|u dte |和bt.id='| id|no | | |'按bt id分组,ct.cus id';结束家庭借贷@MuralidharA,编辑您的帖子以包含该代码。请为bnkr\u tbl
发布create table
语句。它抛出了相同的错误。您还可以为此添加exec procedure命令。ORA-01027-数据定义操作不允许使用绑定变量ORA-06512:在“home_lending_cus”第5行ORA-06512:在第1行,我尝试运行-exec home_lending_cus('99999999',20140912)
CREATE OR REPLACE PROCEDURE home_lending_cus(
id_no VARCHAR2,
prod_nme VARCHAR2,
rpt_dte NUMBER) authid current_user
AS
BEGIN
EXECUTE immediate
' CREATE TABLE abc (bt_id number, cus_id number)'
EXECUTE IMMEDIATE
'INSERT INTO abc (bt_id, cus_id)
SELECT bt.id,
ct.cus_id
FROM bnkr_tbl bt ,
cus_tbl ct ,
base_tbl bt
WHERE bt.id =ct.id
AND ct.id =bt.c_id
AND bt.pr_nme= :1
AND bt.dte = :2
AND bt.id = :3
GROUP BY bt.id,
ct.cus_id' using prod_nme, rpt_dte, id_no;
END home_lending_cus;