【发布时间】:2020-09-07 11:52:25
【问题描述】:
我正在尝试编写一个基于模式名称和表名称参数返回序列名称的过程。
该过程将查看all_sequences 并根据给定的模式和表名找到正确的序列。它将通过 EXECUTE IMMEDIATE 命令执行此操作,并将序列名称插入到变量中。
所有序列都命名为s_[table_name]、seq_[table_name] 或[table_name]_seq。
这是我写的代码:
PROCEDURE proc_find_sequence(
shema_name VARCHAR2,
table_name VARCHAR2,
)
IS
sequence_name1 VARCHAR2(30);
BEGIN
EXECUTE IMMEDIATE
'SELECT s.sequence_name FROM all_sequences s
WHERE
s.SEQUENCE_OWNER = UPPER('||shema_name||')
AND
(
s.sequence_name LIKE UPPER(''''S_%'''||table_name||')
OR
s.sequence_name LIKE UPPER(''''SEQ_%'''||table_name||')
OR
s.sequence_name LIKE UPPER('||table_name||'''%_SEQ'''')
)'
INTO sequence_name1;
DBMS_OUTPUT.PUT_LINE(sequence_name1);
END;
我得到的错误是“ORA-00907:缺少右括号”,尽管我确信问题在于我使用括号之间的参数实现 LIKE 子句的方式。
对于如何解决问题的任何帮助或想法都将不胜感激。
【问题讨论】:
-
为什么要使用动态 SQL?