ORACLE创建一个存储过程(删除指定数据)

ORACLE原语句是这样的:delete from report_date t where t.address='广东省'

我创建的存储过程是这样写的:
create or replace procedure delete_new_report_data
as
sql_dl varchar2(200)
begin
sql_dl='delete from report_data t where t.address in ('广东省')'
EXECUTE IMMEDIATE sql_dl;
end;
但提示错误,是哪里错了?
这个要怎么来创建存储过程?

sql_dl='delete from report_data t where t.address in ('广东省')'

这行双重单引号,你不觉得有问题吗?需要转义一下。

还有个问题,你的这条sql明明可以不用in的,是还有别的省份没写进来吗?如果没有别的省份,建议使用=而不要用in,因为in与=的性能差距可是很大的,数据量越大,性能差距越明显。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-03
CREATE OR REPLACE PROCEDURE DELETE_NEW_REPORT_DATA AS
  SQL_DL VARCHAR2(200); --;忘记了
BEGIN
  SQL_DL = 'delete from report_data t where t.address in ('' 广东省 '')' ;--;忘记了 ''''
  EXECUTE IMMEDIATE SQL_DL;
END;

追问

追答CREATE OR REPLACE PROCEDURE DELETE_NEW_REPORT_DATA AS
  SQL_DL VARCHAR2(200); --;忘记了
BEGIN
  SQL_DL := 'delete from report_data t where t.address in ('' 广东省 '')' ;--;忘记了 ''''  =换成:=
  EXECUTE IMMEDIATE SQL_DL;
END;

 我去 错误比我想的还多

本回答被提问者采纳
第2个回答  2020-12-25

MySQL教程4 MySQL8运算符、函数、存储过程及新增数据类型 17.之创建带有IN和OUT参数的存储过程 学习猿地

第3个回答  2014-12-03
广东省那行,最后是不是少个分号?