ホームページ  >  記事  >  データベース  >  Oracle ストアド プロシージャの変数に値を割り当てる方法にはどのようなものがありますか?

Oracle ストアド プロシージャの変数に値を割り当てる方法にはどのようなものがありますか?

青灯夜游
青灯夜游オリジナル
2022-01-25 16:57:0821038ブラウズ

変数に値を割り当てる方法: 1. 値を直接割り当てるには「:=」を使用し、構文は「変数名:=値;」です; 2. 「選択テーブル フィールド」を使用します。 into variable from table" ステートメント; 3. 「即時 SQL ステートメント文字列を変数に実行する」ステートメントを使用します。

Oracle ストアド プロシージャの変数に値を割り当てる方法にはどのようなものがありますか?

このチュートリアルの動作環境: Windows 7 システム、Oracle 11g バージョン、Dell G3 コンピューター。

#Oracle ストアド プロシージャの変数宣言と割り当て方法

1. 変数を宣言する 3 つの方法

データ型の宣言方法で区別する

方法1:データ型を直接宣言する

形式:変数名データ型(サイズ)

V_START_DATE VARCHAR2(19);
v_num number;

注:

文字列型に設定する場合、サイズを指定する必要があります。指定しないとエラーが報告されます。

変数は、「begin」キーワードを実行する前に指定する必要があります。

--错误用法
BEGIN
v_sql varchar2(100) := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410621101233)';

方法 2: %TYPE ステートメントを使用する

形式: 変数名テーブル名.フィールド名 %TYPE

意味: 変数のデータ型は、指定されたテーブルの指定されたフィールドのデータ型と一致しています

V_ORGSEQ BASE_ORG_INFO.ORGSEQ%TYPE;

方法 3: %ROWTYPE ステートメントを使用します

形式: 変数名テーブル名%ROWTYPE

意味: 変数のデータ型は、指定されたテーブルの指定された行レコード (すべてのフィールド) のデータ型と一致しています

--VIRTUAL_CARD表整行数据
V_ROW_VIRTUAL_CARD VIRTUAL_CARD%ROWTYPE; 

概要:

ストアド プロシージャでは、変数を宣言する場合、キーワード「DECLARE」を使用する必要はありません。

変数では大文字と小文字が区別されません。

変数は使用前に宣言する必要があります。

#2. 変数の代入の 3 つの方法

方法 1: 直接代入、":=

使用条件: 変数を宣言する最初の 2 つの方法に適用されます。

V_ORGID :=  '110';  
説明:

変数の直後に SQL ステートメントを続けることはできません。SQL は実行されません。方法 3 を参照してください。

--错误用法
V_ORGSEQ := SELECT ORGSEQ INTO V_ORGSEQ FROM BASE_ORG_INFO;
--正确用法
V_ORGSEQ := 'SELECT ORGSEQ INTO V_ORGSEQ FROM BASE_ORG_INFO';
変数の宣言と代入は同時に行うことができます。

--正确用法
v_sql varchar2(100) := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410621101233)';
BEGIN
 /* 具体业务 */
END;
方法 2: テーブル フィールドをテーブルから変数に選択します

バリエーション 1: 指定されたテーブルの指定されたフィールドをクエリします

使用条件 :

変数の宣言に適用できる最初の 2 つのメソッドが使用できます

--根据医疗机构ID查询对应的父机构的机构序列
SELECT ORGSEQ INTO V_ORGSEQ FROM BASE_ORG_INFO
 WHERE ORGID =
       (SELECT PARENTORGID FROM BASE_ORG_INFO WHERE ORGID = V_ORGID);
バリエーション 2: 指定されたテーブルのすべてのフィールドをクエリします

使用条件:

のみ適用可能宣言への変数の 3 番目のメソッド

--将id=5120的VIRTUAL_CARD表数据赋值给变量V_ROW_VIRTUAL_CARD
SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T where t.id = 5120;
説明:

クエリ結果は 1 つのレコードのみを返すことができます;

Query table フィールドはテーブルのすべてのフィールドである必要があります。

エラー例:

--错误举例一:查询的是所有表记录
SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T;
--错误举例二:查询的是该表的多个字段
SELECT t.id,t.name INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T;  

方法 3: SQL ステートメント文字列を変数

declare/* 存储过程,不需要声明 */
  v_sql varchar2(100);
  V_ORGSEQ varchar2(100);
begin
  v_sql := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410621101233)';
  --V_ORGSEQ赋值
  execute immediate v_sql INTO V_ORGSEQ;
  --打印结果
  DBMS_OUTPUT.put_line(V_ORGSEQ);
END;

3 に直接実行します。変数の呼び出し

一般に、変数には次の 3 つの使用シナリオのみがあります: 代入、論理判断、算術演算;

注:

はクエリとして使用できません。 column

--错误调用
select V_ORGSEQ from dual;
%ROWTYPE を使用して宣言された変数を呼び出すにはどうすればよいですか?

「変数名.テーブルフィールド」メソッドを使用すると、テーブル内の指定した行(戻り行)の指定した列(任意の列)で表されるデータを取得できます。

--V_ROW_VIRTUAL_CARD赋值
SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T where t.id = 5120;
--调用
DBMS_OUTPUT.put_line(V_ROW_VIRTUAL_CARD.ID);  

推奨チュートリアル: 「

Oracle チュートリアル

以上がOracle ストアド プロシージャの変数に値を割り当てる方法にはどのようなものがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。