IN OUTパラメータ

   Oracleでは、IN OUTパラメータにあらかじめ値を入れておけるので、ストアドプロシージャ側に値を渡すことができます(リスト21)


CREATE PROCEDURE
  SWAP( A IN OUT VARCHAR2,
        B IN OUT VARCHAR2 ) IS
  C VARCHAR2(10);
BEGIN
  C := A;
  A := B;
  B := C;
END;

DECLARE
  A VARCHAR2(10) DEFAULT 'FIRST';
  B VARCHAR2(10) DEFAULT 'SECOND';
BEGIN
  SWAP( A, B );
  DBMS_OUTPUT.PUT_LINE( 'A = ' || A );
  DBMS_OUTPUT.PUT_LINE( 'B = ' || B );
END;

リスト21:OracleでのIN OUTパラメータ例


   その実行結果です。
 

A = SECOND
B = FIRST

   PostgreSQLでは、IN OUTパラメータに関しても、OUTパラメータと同様に複合型を使って移行します(リスト22)
 

CREATE TYPE SWAP_INOUTS AS
  ( A VARCHAR, B VARCHAR );

CREATE OR REPLACE FUNCTION
  SWAP( VARCHAR, VARCHAR )
RETURNS SWAP_INOUTS AS '
  DECLARE
    A ALIAS FOR $1;
    B ALIAS FOR $2;
    INOUTS SWAP_INOUTS;
  BEGIN
    INOUTS.A := B;
    INOUTS.B := A;
    RETURN INOUTS;
  END;
 ' LANGUAGE 'plpgsql';

 CREATE OR REPLACE FUNCTION TEST_SWAP()
   RETURNS VOID AS '
 DECLARE
   INOUTS SWAP_INOUTS%ROWTYPE;
 BEGIN
   INOUTS.A := ''FIRST'';
   INOUTS.B := ''SECOND'';
   SELECT * INTO INOUTS FROM SWAP(
INOUTS.A, INOUTS.B );
   RAISE NOTICE ''A = %'', INOUTS.A;
   RAISE NOTICE ''B = %'', INOUTS.B;
   RETURN;
 END;
 ' LANGUAGE 'plpgsql';

リスト22:IN OUTパラメータへの値の代入


   実行結果です。
 

% SELECT TEST_SWAP();

 NOTICE: A = SECOND
 NOTICE: B = FIRST

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30