Tim*_*imo 18 sql oracle sequence
对于我使用Oracle 8 DB的应用程序,我提供了一个SQL脚本来设置触发器,序列等内容,可以将其复制并粘贴到SQL*Plus中.如果我尝试创建的序列已存在,我希望脚本不会因错误而停止.对于触发器,可以使用"创建或替换触发器..."轻松完成,但对于序列,这不起作用.我也试过""如果不存在mysequence然后创建序列..."但它也没有.有没有其他选择?
或者,如果这不可能,有没有办法在没有SQL*Plus的情况下执行"drop sequence mysequence",如果mysequence不存在则中止脚本?
jva*_*jva 15
DECLARE
v_dummy NUMBER;
BEGIN
-- try to find sequence in data dictionary
SELECT 1
INTO v_dummy
FROM user_sequences
WHERE sequence_name = 'MY_SEQUENCE_NAME';
-- if sequence found, do nothing
EXCEPTION
WHEN no_data_found THEN
-- sequence not found, create it
EXECUTE IMMEDIATE 'create sequence my_sequence_name';
END;
Run Code Online (Sandbox Code Playgroud)
如果您确定该脚本将始终在SQL*Plus下运行,则可以使用指令将CREATE SEQUENCE语句括起来继续出错:
WHENEVER SQLERROR CONTINUE
-- create sequences here, ignoring errors
WHENEVER SQLERROR EXIT SQL.SQLCODE
Run Code Online (Sandbox Code Playgroud)
请注意,如果创建序列语句中存在其他错误(权限问题,语法失败等),则会忽略它们
我喜欢:
DECLARE
C NUMBER;
BEGIN
SELECT COUNT(*) INTO C
FROM ALL_TRIGGERS
WHERE OWNER = 'YOUROWNER'
AND TRIGGER_NAME = 'YOURTRIGGER';
IF (C = 0) THEN
EXECUTE IMMEDIATE '
CREATE TRIGGER "YOUROWNER"."YOURTRIGGER"
blah blah blah your trigger blah blah
';
END IF;
END;
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37264 次 |
| 最近记录: |