检查表是否存在重复项的过程-Oracle PL/SQL
一般来说,SQL非常新 我已经看到了一些关于如何在PL/SQL中将表声明为变量的示例,但是,它们似乎都不能满足我的需要 程序非常简单,检查表中是否有重复的唯一数字,例如:检查表是否存在重复项的过程-Oracle PL/SQL,oracle,plsql,plsqldeveloper,Oracle,Plsql,Plsqldeveloper,一般来说,SQL非常新 我已经看到了一些关于如何在PL/SQL中将表声明为变量的示例,但是,它们似乎都不能满足我的需要 程序非常简单,检查表中是否有重复的唯一数字,例如: select unique_id, count(unique_id) as count_unique from table_name having count(unique_id)>1 group by unique_id 我想创建一个可以调用并动态更改名称和唯一id的过程 比如: declare
select unique_id,
count(unique_id) as count_unique
from table_name
having count(unique_id)>1
group by unique_id
我想创建一个可以调用并动态更改名称和唯一id的过程
比如:
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;
/
如果希望在运行时更改表,则需要动态SQL,这意味着您需要将所需的SQL语句组装到字符串变量中并执行该字符串。如果您有一个过程,则需要该过程来处理查询结果。我猜您想要返回一个游标
注意,我没有做任何事情来验证表名和列名,以避免SQL注入攻击。您可能希望使用dbms\u assert
来验证输入,而不是盲目地信任调用者
create or replace procedure get_duplicates( p_table_name in varchar2,
p_column_name in varchar2,
p_rc out sys_refcursor )
as
l_sql varchar2(1000);
begin
l_sql := ' select ' || p_column_name || ', ' ||
' count(' || p_column_name || ') as unique_count ' ||
' from ' || p_table_name ||
' group by ' || p_column_name ||
' having count(' || p_column_name || ') > 1';
dbms_output.put_line( l_sql );
open p_rc for l_sql;
end;
是的,我想,我需要一个动态SQL来运行这个检查,这样我就可以避免撞到墙了。“你能给我指一下吗?@I.Я.纽伯-对不起,我没听懂。关于动态SQL的任何内容都不会对权限产生任何影响。如果您有查询表的权限,则无论您使用的是动态SQL还是静态SQL,您都有权限。如果您没有权限,则无法查询该表。抱歉,我可能错过了对话-我没有创建过程的权限。也许,一个新问题更适合于当前问题的动态SQL解决方案。-我的问题是关于具有相同目的的动态SQL。