2016/04/22

Oracle PL/SQL Dynamic SQL 動態語法 4

在這篇文章中,

介紹 Orale Dynamic SQL 如何動態取得多筆資料,

參考範例, 如下 :
 程式碼
DECLARE
  V_SQL VARCHAR2(10000) := '';
  
  TYPE V_RESULT_TYPE IS TABLE OF VARCHAR2(50);
  V_RESULT V_RESULT_TYPE;
  
  -- 各個 DB Site
  CURSOR CUR_SITE IS
  SELECT VALUE_DATA     DB_LINK
       , VALUE_DISPLAY  SITE
    FROM ERP_VALUE_SET
   WHERE VALUE_NAME = 'SITE';
BEGIN
  -- 動態組成 SQL 語法
  FOR REC_SITE IN CUR_SITE LOOP
      IF CUR_SITE%ROWCOUNT > 1 THEN
         V_SQL := V_SQL || ' UNION ALL ';
      END IF;
      
      V_SQL := V_SQL || 'SELECT ''' || REC_SITE.SITE || ''' SITE'
                     || '  FROM USER_OBJECTS@' || REC_SITE.DB_LINK
                     || ' WHERE OBJECT_NAME = ''TOM_DB_PKG'' '
                     || '   AND STATUS <> ''VALID'' ';
  END LOOP;
  
  -- 執行動態語法
  EXECUTE IMMEDIATE V_SQL BULK COLLECT INTO V_RESULT;
  
  -- 顯示結果: 多筆資料
  DBMS_OUTPUT.PUT_LINE( 'TOM DB Package 有失效, 如下 :' );
  FOR I IN 1..V_RESULT.COUNT()
  LOOP
      DBMS_OUTPUT.PUT_LINE( V_RESULT(I) );
  END LOOP;
END;

其他 Dynamic SQL 介紹文章 :

Dynamic SQL 基礎:Dynamic SQL 基本語法.

進階 1:動態執行 Procedure / Function.

進階 2:動態執行 begin ~ end;