【问题标题】:Dynamic SQL for duplicates check - Oracle PL/SQL用于重复检查的动态 SQL - Oracle PL/SQL
【发布时间】:2021-04-01 09:44:17
【问题描述】:

由于我的权限有限,无法创建以下程序。

我需要有关开发用于检查表中是否存在重复唯一 ID 的动态 SQL 的帮助。 此外,是否可以使用相同的查询检查多个表的重复项?

declare 
  table_name is table:= table_1
  unique_id varchar2(100):= unique_1
begin
  select unique_id,
         count(unique_id) as count_unique
    from table_name
  having count(unique_id)>1
   group by unique_id 
end;
/

【问题讨论】:

    标签: oracle plsql oracle10g


    【解决方案1】:

    如果您无法创建存储过程(或函数),那么您注定 将使用匿名 PL/SQL 块。这是在 SQL*Plus 中工作的一个(可能也在 SQL Developer 中)。在代码中读取 cmets。

    对于 Scott 的 EMP 表,作业数为

    SQL> select job, count(*) from emp group by job;
    
    JOB         COUNT(*)
    --------- ----------
    CLERK              4
    SALESMAN           4
    PRESIDENT          1
    MANAGER            3
    ANALYST            2
    
    SQL>
    

    你会的

    SQL> declare
      2    l_table  varchar2(30) := '&PAR_TABLE_NAME';
      3    l_column varchar2(30) := '&PAR_COLUMN_NAME';
      4    l_str    varchar2(500);
      5    l_rc     sys_refcursor;
      6    --
      7    l_ret_column varchar2(30);
      8    l_ret_cnt    number;
      9  begin
     10    -- compose a SELECT statement
     11    l_str := 'select '    || l_column || ', count(*) cnt '   ||
     12             ' from '     || l_table  ||
     13             ' group by ' || l_column ||
     14             ' having count(*) > 1';
     15
     16     -- use L_STR as a "source" for the L_RC (ref)cursor
     17     open l_rc for l_str;
     18
     19     -- loop, fetch data, display what you've found
     20     loop
     21       fetch l_rc into l_ret_column, l_ret_cnt;
     22       exit when l_rc%notfound;
     23
     24       dbms_output.put_line(l_table ||'.'|| l_column ||' = ' ||
     25                              l_ret_column ||', ' || l_ret_cnt || ' row(s)');
     26     end loop;
     27
     28     close l_rc;
     29  end;
     30  /
    Enter value for par_table_name: emp
    Enter value for par_column_name: job
    emp.job = CLERK, 4 row(s)
    emp.job = SALESMAN, 4 row(s)
    emp.job = MANAGER, 3 row(s)
    emp.job = ANALYST, 2 row(s)
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      相关资源
      最近更新 更多