453) バッチで実行するSQLファイルにパラメタを与える方法 宇和野空 2003/07/22(火) 16:36 こんにちわ。 このようなことが可能なのか教えて頂きたくて載せてみました。 マシンはWinNT4.0とWin2000Proで動作させています。 - TABLE ここではORACLE社が提供するPL/SQL言語でファンクションの書き方(作成/実行/呼び出し/削除)を紹介しています。, PL/SQLで実行できる処理は↓でまとめて紹介していますので参考にしてください。>>PL/SQLの処理, PL/SQLの処理は、スアドプロシージャ、ストアドファンクションとしてデータベース上に作成することが出きます。, ストアドファンクションはいわゆる部品に該当し、ストアドプロシージャやSQLから呼び出されます。, ストアドファンクションが部品の位置付けである一方、ストアドプロシージャはバッチ処理に位置付けられます。, また、ストアドファンクションはストアドプロシージャと違い大きく以下の2点が違います。 ・必ず返却値が必要なこと ・SQLでも利用可能なこと, CREATE FUNCTIONで名前、引数、戻り値を記述します。その後、宣言部、処理部、例外処理部と順にPL/SQLの処理を書いていきます。, PL/SQLの基本的な書き方については↓で紹介していますので参考にしてください。>>PL/SQLの書き方, ・OR REPLACE 同じ名前のファンクションが存在する場合、上書き更新します。, ・IN OUT IN,OUT、両方の特性を持ちます。 ファンクションの引数としても使え、ファンクションの結果で上書きし返すことが出来ます。, 「FUNCTION func1(p1 IN NUMBER)」として引数を宣言しています。, 「RETURN NUMBER」で戻り値のデータ型をNUMBER型に指定しています。, 「FUNCTION func1(p1 IN NUMBER,p2 OUT NUMBER)」として、IN引数にp1を、OUT引数にp2を宣言しています。, 「func3(p1 IN NUMBER,p2 IN OUT NUMBER)」としてIN引数とIN OUT引数を宣言しています。, 「p2 := p1 * p2;」でIN OUT引数のp2にp1とp2を掛けた値を代入しています。, 「[(引数名 {IN | OUT | INOUT } データ型,..)]」の部分を書かなければ、引数なしのファンクションになります。, 「variable 変数名 データ型;」で変数を宣言して、IN引数にパラメータを渡しています。「EXECUTE :変数名 := 値;」で変数に値を代入することが出きます。, ここでは「SELECT func1(:input1) FROM dual;」として、SELECT句で実行しています。, IN引数(input1)、OUT引数(output1)、そして戻り値を受け取る変数(output2)を宣言しています。, 「EXECUTE :output2 := func2(:input1,:output1);」でファンクションの実行と共に、戻り値をoutput2に代入しています。, IN引数(input1)、IN OUT引数(inout1)、そして戻り値を受け取る変数(output1)を宣言しています。, 「execute :output1 := func3(:input1,:inout1);」でファンクションの実行と共に、戻り値をoutput1に代入しています。, 「execute :output1 := func4;」でファンクションを実行しています。, 必要な権限については↓でまとめていますので参考にしてください。>>作成や実行に必要な権限と確認・付与する方法. 引数のタイプがinと utのプロシージヤの作成 CREATE OR REPLACE PROCEDURE myout_param_proc ( p_param1 IN NUMBER DEFAULT 0 , p_param2 IN NUMBER DEFAULT 0 , p_returnno OUT NUMBER ) IS BEGIN p_returnno : = p_param1 * p_param2 ; END ; / IN OUT引数を指定したプログラムの例です。 「func3(p1 IN NUMBER,p2 IN OUT NUMBER)」としてIN引数とIN OUT引数を宣言しています。 「p2 := p1 * p2;」でIN OUT引数のp2にp1とp2を掛けた値を代入しています。 DMLが実行されるたびに値が更新される。, | 格納する要素の数 | 制限なし | - データ型を直接指定するのではなく、Oracleの列のデータ型や既に定義されている変すのデータ型を参照する - NUMBER - ユーザーが事前に定義 | 添え字 | 任意の値 | 表(またはビュー)の行構造を参照 - 数値や文字列 - dept.deptno%TYPEは「DEPT表のDEPTNO列とおなじデータ型を使用する」. 3. | 要素の削除 | 可能 |, 特定の処理をさせ、引数を指定でき、複数のプログラム間で値を受け渡して処理を行える。(関数のようなもの?), 値を計算して結果を*** 必ず一つ以上戻す。(RETURN)*** | 添え字のデータ型 | 数値、文字列 | SQL*Plusの起動時、Oracle Databaseスキーマへのログインにユーザー名およびパスワードが必要です。ユーザー名およびパスワードによって、Oracle Databaseスキーマの認証されたユーザーとして識別され … By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. %ROWTYPE SQL文で直接呼び出せる。(引数のタイプにOUTがあるとだめ). レコード型の変数を宣言「レコード型変数名 カーソル名%ROWTYPE;」 - CHAR, ■コンポジット型 カーソルを宣言 「COURSOR カーソル名 IS SELECT文」 - 複数の値を保持できる - ユーザーが事前に定義 5. Help us understand the problem. technology. <変数名> <表名>%ROWTYPE; SELECT INTOでは単一行のデータしか取得できないがカーソルを利用することで、複数行のデータを取得することができる。, ■手順 今回は仕事中によく使うPL/SQLの書き方および実行方法を紹介します。今後、PLSQLを作成するとき、参照いただければ、幸いです。, シェルで変数を定義し、PL/SQLブロック文をSQL*PLUSで実行する。※PL/SQLブロックをファイルに書いて、ファイルで実行してもいいです。, ストアドプロシージャやストアドファンクションを実行するにはCALLまたはEXECUTE文を実行する。CALLでは戻り値を受け取るため、INTOを使います。, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。, tar: Error is not recoverable: exiting now, CREATE OR REPLACE PROCEDURE testPlSql(testPlsql VARCHAR2) IS, CREATE OR REPLACE FUNCTION testPlSql2(testPlsql VARCHAR2) RETURN number. Powered by WordPress with Lightning Theme & VK All in One Expansion Unit by Vektor,Inc. カーソルをオープン「OPEN カーソル名;」 | 初期化 | 宣言時に自動的に初期化される | ■スカラー型 - RECORD カーソルからデータを取得(フェッチ)「FETCH カーソル名 INTO レコード型変数名」 1. カーソルをクローズ「CLOSE カーソル名;」, 直前に実行したDML文の結果が格納されるため、 Oracle開発ツールのいくつかは、PL/SQL の引数が配列の場合、自由に値がセットできなくて、苦労するケースもあるかと思います。 Oracle SQL Developer のデバッグ実行にて、『PL/SQL ブロック』を編集することで、配列型の引数に、好きな値を設定する事ができます。 IN OUT引数を指定したサンプルプログラム.