如果Oracle PL / SQL中尚未存在,则如何在Oracle PL / SQL中创建新的OBJECT TYPE

时间:2016-10-27 19:15:35

标签: sql oracle plsql oracle11g

我需要在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是否存在?

1 个答案:

答案 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;
/