动态SQL删除重复记录的过程

HalfWebDev

我已经成功实现了一个proc,可以从表中删除删除重复的记录。继续进行下去,我进一步尝试使用Dynamic sql来概括此过程,但是在编译自身时出现以下错误。

ERROR line 13, col 7, ending_line 14, ending_col 14, Found ''SELECT ROWID, ERR_MOD FROM '', Expecting: ( SELECT -or- WITH

这是我的代码:-


CREATE OR REPLACE PROCEDURE BIOCON.proc_dedup (
   p_tblname   IN     VARCHAR2,
   p_cname   IN varchar2,
   p_cvalue  IN varchar2,
   p_out          OUT VARCHAR2:=0
)
IS
   v_cnt   NUMBER;

CURSOR TMP IS 'SELECT ROWID, ERR_MOD FROM ' || p_tblname|| 'WHERE '|| p_cname '='||''p_cvalue ''; BEGIN BEGIN 'SELECT COUNT ( * ) INTO v_cnt FROM ' || p_tblname|| 'WHERE '|| p_cname' = '||''p_cvalue''; EXCEPTION WHEN OTHERS THEN p_out:=1; end;

FOR REC IN tmp LOOP IF v_cnt = 1 THEN EXIT; ELSE 'DELETE FROM '|| p_tblname|| 'WHERE ROWID = REC.ROWID'; END IF;

  v_cnt := v_cnt - 1;

END LOOP; EXCEPTION WHEN OTHERS THEN p_out := 2; END; /

哈西特

嗨,您不能在这种情况下为普通游标创建动态查询,您应该使用ref游标并遵循以下步骤-创建查询字符串-打开ref游标,并请使用立即执行来执行delete语句...

CREATE OR REPLACE PROCEDURE BIOCON.proc_dedup (
   p_tblname   IN     VARCHAR2,
   p_cname   IN varchar2,
   p_cvalue  IN varchar2,
   p_out          OUT VARCHAR2:=0

 IS
   v_cnt   NUMBER;
   v_string varchar2(200);
   TYPE ref_cur IS REF CURSOR
   ref_cursor_name ref_cur;

BEGIN
      v_string:='SELECT ROWID, ERR_MOD FROM ' || p_tblname|| 'WHERE '|| p_cname    
      '='||''p_cvalue ''; 
  OPEN cursor_variable_name FOR v_string;
   .....
     .....


  EXECUTE IMMEDIATE 'DELETE FROM '|| p_tblname|| 'WHERE ROWID = REC.ROWID';--you need execute immediate for this

..... .....

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

删除SQL中的重复记录

来自分类Dev

如何从SQL Server删除重复记录?

来自分类Dev

如何删除SQL中的重复记录?

来自分类Dev

删除重复记录

来自分类Dev

sql使用联接时删除重复记录

来自分类Dev

使用SQL删除表中的重复记录

来自分类Dev

Oracle SQL查询:从表中删除最旧的重复记录

来自分类Dev

sql使用联接时删除重复记录

来自分类Dev

从 SQL Server 中的视图中删除重复记录

来自分类Dev

SQL:同时删除重复记录和更新外键

来自分类Dev

sql重复记录与更改

来自分类Dev

SQL中的重复记录

来自分类Dev

sql重复记录与更改

来自分类Dev

SQL连接重复记录

来自分类Dev

如何使用linq删除重复记录?

来自分类Dev

删除基于多列的重复记录

来自分类Dev

如何使用linq删除重复记录?

来自分类Dev

根据规则选择或删除重复记录

来自分类Dev

删除 vCard 文件中的重复记录

来自分类Dev

计算SQL中的重复记录,然后将重复记录的数量添加到记录数量中,并删除其余的记录

来自分类Dev

消除SQL中的重复记录

来自分类Dev

仅显示重复记录-Oracle SQL

来自分类Dev

在Oracle SQL中处理重复记录

来自分类Dev

在PL / SQL中检查重复记录

来自分类Dev

T- SQL重复记录

来自分类Dev

SQL Server:搜索重复记录

来自分类Dev

合并SQL Server中的重复记录

来自分类Dev

从 SQL 查询中获取重复记录

来自分类Dev

对MSSQL存储过程的JPA调用返回重复记录