我需要在PL / SQL中声明一个新的OBJECT TYPE,以便在只选择几列的连接查询中保存行。我可以很好地创建TYPE,但它成为模式的一部分。
类似的东西:
IF (SELECT COUNT(*) FROM user_objects WHERE LOWER(object_name) = 'my_custom_type') = 0 THEN
CREATE TYPE my_custom_type AS OBJECT
(
...
);
/
END IF;
DECLARE
v_foo my_custom_type%TYPE;
BEGIN
-- Do stuff with v_foo...
END;
/
如何在创建TYPE之前检查TYPE是否存在?
答案 0 :(得分:4)
如果您需要新的SQL类型。您可以使用动态SQL创建它。
DECLARE
v_count NUMBER(10);
BEGIN
SELECT COUNT(*) INTO v_count
FROM user_objects
WHERE LOWER(object_name) = 'my_custom_type';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE TYPE my_custom_type AS OBJECT (
id NUMBER(10),
name VARCHAR2(100)
)';
END IF;
END;
/