【发布时间】:2021-02-11 18:57:13
【问题描述】:
我想检查all_workspace 表中是否没有工作区,然后创建新工作区。
我的要求是如果p_workspace 与v_workspace 的值列表不匹配,那么它应该创建一个新的。
DECLARE
p_workspace VARCHAR2(100):='WS-38515';
TYPE t_ws IS TABLE OF VARCHAR2(30);
v_workspace t_ws := t_ws();
Begin
execute immediate '
SELECT
DISTINCT WORKSPACE
FROM WMSYS.all_workspaces
'
BULK COLLECT INTO v_workspace;
FOR i IN v_workspace.first..v_workspace.last LOOP
IF v_workspace(i) <> p_workspace THEN
dbms_wm.CreateWorkspace(p_workspace,isrefreshed=>TRUE);
END IF;
END LOOP;
EXCEPTION
when others then
Dbms_Output.put_line(p_workspace || ': ' || SQLERRM);
END;
/
它在创建后给我错误。
PL/SQL procedure successfully completed.
WS-38515: ORA-20023: a workspace already exists with the name: 'WS-38515'
如果我单独运行该工作区,那么它可以正常工作。但是当我通过检查可用性检查块时,它不起作用。
execute dbms_wm.CreateWorkspace('WS-38515',isrefreshed=>TRUE);
请帮助任何人。
【问题讨论】:
-
鉴于您正在硬编码要创建的工作区的名称,我看不到这样一个过程的实用性。现在,如果您将其作为输入参数传递,也许。但即便如此,您多久创建一次新工作空间?编写一个程序的所有这些麻烦,当它归结为它时,发出一个命令。 . . .
标签: sql oracle plsql oracle11g