zoukankan      html  css  js  c++  java
  • PLSQL Convert Object to String

    Problem & Goal

    Usually, like in java, any object will implement its to_string() function. So in Plsql, there is the same requirement.
     We want to implement to_string() in plsql.

    Thinking

    When one Object' type is basic type in plsql, then the function will return its value. Otherwise, the function will return its typename.

    Solution  & Example

    CREATE OR REPLACE FUNCTION to_string(obj IN ANYDATA) RETURN VARCHAR2 IS
    code PLS_INTEGER;
    v_type AnyType;
    BEGIN
        code :=obj.getType(v_type);
        CASE 
            code WHEN DBMS_TYPES.TYPECODE_VARCHAR2 THEN
                    RETURN  TO_CHAR(obj.AccessVarchar2());
                WHEN DBMS_TYPES.TYPECODE_BDOUBLE THEN
                    RETURN TO_CHAR(obj.AccessBDouble());
                WHEN DBMS_TYPES.TYPECODE_BFLOAT THEN
                    RETURN TO_CHAR(obj.AccessBFloat());
                WHEN DBMS_TYPES.TYPECODE_NUMBER THEN
                    RETURN TO_CHAR(obj.AccessNumber());
            ELSE RETURN obj.getTypeName(); END CASE;
    END;
    /
    show errors;
    CREATE OR REPLACE TYPE TEST FORCE AS OBJECT
    (id Number,
     name VARCHAR2(20),
     CONSTRUCTOR FUNCTION TEST RETURN SELF AS RESULT);
    /
    show errors;
    CREATE OR REPLACE TYPE BODY TEST AS
     CONSTRUCTOR FUNCTION TEST RETURN SELF AS RESULT IS 
     BEGIN RETURN;END;
    END; 
    /
    show errors;
    SET SERVEROUTPUT ON;
    DECLARE 
    a Number;
    b VARCHAR2(20);
    c TEST;
    BEGIN
        a :=1;
        b:='julia zhang';
        c :=TEST();
        dbms_output.put_line('a:to_string()::::'||to_string(AnyData.convertNumber(a)));
        dbms_output.put_line('b:to_string()::::'||to_string(AnyData.convertVarchar2(b)));
        dbms_output.put_line('c:to_string()::::'||to_string(AnyData.convertObject(c)));
    END;
    /

    Extend

    CREATE OR REPLACE FUNCTION AnydataArray1ToString (id IN AnydataArray , for_flatten BOOLEAN ) RETURN
    VARCHAR2 IS
    i INTEGER ; result_str VARCHAR2 (32767); BEGIN
        result_str  := '';
        FOR i IN 1..id.count
        LOOP
            IF  for_flatten  THEN
                result_str  := result_str  || ', ' || objectToString (id (i ));
            ELSE result_str  := result_str  || objectToString (id (i )); END IF;
        END LOOP;
        IF  for_flatten  THEN RETURN substr (result_str , 3); ELSE
            RETURN result_str ; END IF;
    END ;
    /

    Refference

    http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/t_anydat.htm#BEHEICHI

    每天一点点
  • 相关阅读:
    OpenCV 笔记 (C++模板template)
    C++中预定义的运算符的操作对象只能是基本的数据类型
    linux-CentOS6.4下安装oracle11g详解
    Eclipse 连接MySql数据库总结
    六个创建模式之单例模式(Singleton Pattern)
    六个创建模式之抽象工厂模式(Abstract Factory Pattern)
    六个创建模式之工厂方法模式(Factory Method Pattern)
    六个创建模式之简单工厂模式(Simple Factory Pattern)
    搜狗实习面试
    Java设计模式 -- 基本原则
  • 原文地址:https://www.cnblogs.com/juliazhang/p/5091314.html
Copyright © 2011-2022 走看看