OSEC

Neohapsis is currently accepting applications for employment. For more information, please visit our website www.neohapsis.com or email hr@neohapsis.com
 
Re: Base table or view already exists;-6000 Duplicate table name

From: Дмитрий Русанов (rusanovdc.baikal.ru)
Date: Mon Aug 01 2005 - 01:03:35 CDT


if I modify my function , then select 'select * from (SELECT
attrToString('sex', '2', 11) from DUAL)' succeed

DROP FUNCTION LAB.attrToString

//

CREATE FUNCTION LAB.attrToString
    ( attr CHAR(50)
    , value INT
    , revision INT
    )

RETURNS VARCHAR

AS

VAR sResult VARCHAR(1000);

    attr_name VARCHAR(255);
    attr_type VARCHAR(10);

    value_type VARCHAR(10);
    interval VARCHAR(2);
    l_value VARCHAR(12);
    u_value VARCHAR(12);
    l_unit VARCHAR(10);
    u_unit VARCHAR(10);
    const_value VARCHAR(50);
    const_name VARCHAR(255);
    synonym VARCHAR(255);

BEGIN

    IF attr IS NULL OR value IS NULL OR revision IS NULL THEN
        RETURN '';

    SET sResult = '';

    TRY

        TRY

            SELECT cc.attr_name, cc.attr_type, dd.value_type,
dd.interval, dd.l_value, dd.u_value, dd.l_unit, dd.u_unit,
dd.const_value, dd.const_name, CHR(null) synonym
                INTO :attr_name, :attr_type, :value_type, :interval,
:l_value, :u_value, :l_unit, :u_unit, :const_value, :const_name, :synonym

                FROM

                    LAB.er_dictionary_attributes cc,
                    LAB.er_attribute_default_values dd

                WHERE

                    cc.attr = :attr
                    AND cc.defined = 'const'
                    AND dd.attr_value = :value;

        CATCH
            IF $rc = 100 THEN BEGIN

                SELECT cc.attr_name, cc.attr_type, dd.value_type,
dd.interval, dd.l_value, dd.u_value, dd.l_unit, dd.u_unit,
dd.const_value, dd.const_name, dd.synonym

                    INTO :attr_name, :attr_type, :value_type, :interval,
:l_value, :u_value, :l_unit, :u_unit, :const_value, :const_name, :synonym

                    FROM

                        LAB.er_dictionary_attributes cc,
                        LAB.er_attribute_user_values dd

                    WHERE

                        cc.attr = :attr
                        AND cc.defined = 'user'
                        AND dd.attr_value = :value

                        AND dd.FromRevisionNo <= :revision
                        AND :revision < DECODE(dd.ToRevisionNo, NULL,
:revision + 1, dd.ToRevisionNo);
            END
            ELSE
                STOP($rc, $errmsg);

        CASE

            WHEN value_type = 'const' THEN BEGIN
                SET sResult = attr_name || ': ' || const_name;
            END;

            WHEN value_type = 'interval' THEN BEGIN

                CASE

                    WHEN interval = '[]' THEN BEGIN

                        SET sResult = '' || l_value || ' ' ||
LAB.unitToString(l_unit) || ' - ' || u_value || ' ' ||
LAB.unitToString(u_unit);

                    END;

                    WHEN interval = '>=' THEN BEGIN
                        SET sResult = '>= ' || l_value || ' ' ||
LAB.unitToString(l_unit);
                    END;

                    WHEN interval = '<=' THEN BEGIN
                        SET sResult = '<= ' || u_value || ' ' ||
LAB.unitToString(u_unit);
                    END;

                    WHEN interval = '>' THEN BEGIN

                        /* not implement */

                        RETURN sResult;

                    END;

                    WHEN interval = '<' THEN BEGIN

                        /* not implement */

                        RETURN sResult;

                    END;

                    WHEN interval = '=' THEN BEGIN

                        /* not implement */

                        RETURN sResult;

                    END;

                    WHEN interval = '(]' THEN BEGIN

                        /* not implement */

                        RETURN sResult;

                    END;

                    WHEN interval = '()' THEN BEGIN

                        /* not implement */

                        RETURN sResult;

                    END;

                    WHEN interval = '[)' THEN BEGIN

                        /* not implement */

                        RETURN sResult;

                    END;

                    ELSE
                        RETURN sResult;

                END CASE;

                SET sResult = attr_name || ': ' || sResult;

                IF synonym IS NOT NULL THEN
                    SET sResult = sResult || ' (' || synonym || ')';

                /*
                IF unit_name IS NOT NULL THEN
                    SET s = s || ' ' || unit_name;
                */

            END;

            ELSE
                RETURN 'error: no case value';

        END CASE;

    CATCH
        IF $rc <> 100 THEN
            STOP($rc, $errmsg);

    RETURN TRIM(sResult);

END;

--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb