Oracleストアドプロシージャ - いくつかの段変速機

基本的な構文Oracleのストアドプロシージャ
プロシージャするProc1(CREATE OR REPLACE
p_para1 VARCHAR2、
p_para2 OUT VARCHAR2、
OUT VARCHAR2でp_para3
)AS
v_name VARCHAR2(20)と、
開始
v_nameを:= 'カイマスター';
p_para3:= v_name;
DBMS_OUTPUT.PUT_LINE(「p_para3 :「|| p_para3);
エンド;
注意:ステートメントを作成:作成またはプロシージャ、ストアドプロシージャ名を置き換え、または記載がない場合は交換、そしてちょうどストアドプロシージャを作成します。ストアドプロシージャが存在する場合、エラーが報告されています。オリジナルの削除、再作成し、ストアドプロシージャを置くために、このシステムストアドプロシージャがある場合、システムは、新しいものを作成するには、このストアドプロシージャを持っていない場合の手順を作成するか、または交換してください。 
ストアドプロシージャ名が定義されます。ストアドプロシージャ名とパラメータリストを含みます。パラメータ名とパラメータのタイプ。IN、OUT、OUT、IN:パラメータ名はパラメータ渡しモードは、繰り返すことはできません 
INは値方式によって渡された入力パラメータを表します。 
基準転送モードによって理解されるようにOUTは、出力パラメータを表します。出力は、外部の発信者が使用するストアドプロシージャとして使用することができます。 
入力パラメータ可能OUTには、出力パラメータを使用することができます。 
データ型パラメータは、タイプ名を指定する必要があり、幅を指定する必要はありません。 
幅パラメータは、外部の発信者によって決定されます。 
プロセスパラメータは、引数になることはできません 
変数宣言ブロック:として(である)キーワードに続く、キーワードは、変数を宣言するための宣言PL / SQLのように理解することができます。 
変数宣言ブロックは、変数を宣言するために使用されるストアドプロシージャのストアドプロシージャ、その範囲を使用する必要があります。また、ここでの変数宣言は、幅を指定する必要があります。変数は、PL / SQL文の規範に従ってください。 
プロセスステートメントブロック:キーワード文ブロックプロセスに最初から始めます。詳細な論理ストレージ手順がここに実現しました。 
例外処理ブロック:キーワードの例外は、例外は、ステートメントを処理することによって生成されます。この部分はオプションで 
エンドブロック:端からキーワードの結果。

例:

SP_NAME手順を交換するか作成(
-コンマで区切られたパラメータは、パラメータリスト、。
VARCHAR2にUIDを、 -長さ情報とすることができない
日付に開始日、 -第二の入力パラメータ
VARCHAR2デフォルトでdefaultVarを「」、 -デフォルトパラメータ合格しない場合は、パラメータの順序が留意されるべき
、番号をISOK -出力パラメータが
第二の出力パラメータ- VARCHAR2アウト結果

AS
-変数宣言、ステートメントセミコロンで各端部を、ステートメントはまた、初期化してもよい
VAR1をVARCHAR2(11);
var2の数(2)= 123。

開始
-文字列連結で||
DBMS_OUTPUT.PUT_LINE( 'ISOK:' || 'ABC');

-他のストアドプロシージャ呼び出し
sub_sp_name(PARAM1、prarm2、outParam1、 outParam2)。

エンド; -ストアドプロシージャが終了
---------------------

--1。定義ステートメントブロック

DECLARE 
  -変数を宣言
  ; - VAR1数(2)のみを宣言
  = ':var2ではchar(2) - ; var2の'をしながら、初期化ステートメントを

開始
  -文は
END; - Endステートメントブロックを

--2。if文

 

もし= 1、B = 2、次いで
  
その後3 = C ELSIF 

そう
  
ならば終了。

 

 

 

 

 

--- 3。ケースの文分岐制御

意志出力対応する情報;()メソッドの出力、この従来DOSで上SERVEROUTPUTセットを入力する必要があるDBMS_OUTPUT.PUT_LINE

 

DECLARE 
NUM番号(10):=を11、
開始
    ケースを
        すると、その後DBMS_OUTPUT.PUT_LINE NUM = 10( 'I 10'); 
        場合は、その後NUM = DBMS_OUTPUT.PUT_LINE 11( 'I. 11'); 
        他のDBMS_OUTPUT.PUT_LINE( '私は私が誰か分からない'); 
    エンドケースを、
    
    ケースNUMの
        ときにDBMS_OUTPUT.PUT_LINE 0('私は10です'); 
        ときにDBMS_OUTPUT.PUT_LINE 1(' I ')は、11よ
        、他のDBMS_OUTPUT.PUT_LINE(' I I)は、」私が誰かわからない、
    エンドケース; 
終了;

 

 

 

 

 

--4。Forループ 
--forサイクルは、2つの主な用途を有しています。

--4.1、循環の範囲
  DECLARE 
    I番号(2)
  開始
    にI 9 .. 0ループ。
      DBMS_OUTPUT.PUT_LINE( 'I' || I); 
    エンドループ; 
  END; 

- 4.2、暗黙カーソルが横断

 - -利点暗黙カーソルを容易にするために、手動で閉じる必要がない

BEGIN 
 FOR再IN(SELECTのUserInfo FROM名)LOOP 
  ; DBMS_OUTPUT.PUT_LINE(re.username)
 のEND LOOP; 
END;


第二に、次のストアドプロシージャを使用しました:

私は、テーブルのuserinfoを作成するためにここにいます、

-テーブルを作成します。创建表
テーブルuserinfoを作成します
  IDのVARCHAR2(32)NOT NULL、
  ユーザ名VARCHAR2(20)、
  パスワードVARCHAR2(20)、
  セックスVARCHAR2(2)、
  SALの数(20)、
  insertdate日付のデフォルトのSYSDATEを
-列にコメントを追加
コラムuserinfo.idにコメント
  「ID」です。
コラムuserinfo.usernameにコメントは
  「用户の名」です。
コラムuserinfo.passwordにコメントが
  ある「密码」; 
コラムuserinfo.sexにコメントが
  ある「性别」; 
  コラムuserinfo.salにコメントが
  ある「工资」; 
  コラムuserinfo.insertdateにコメントは
  「插入时间」です。

 

2.1ストアドプロシージャを作成し、データの呼び出しを挿入

 

OR REPLACE CREATE 
-ストアドプロシージャを作成し、更新した場合、データの挿入が存在しません作成
手順proc_test(VARCHARでE_ID、
                    VARCHARでe_username、
                    VARCHARでe_password、
                    VARCHARでe_sex、
                    数e_sal)
-引数を長さを定義、またはエラーがない
 IS 
開始
  INSERT INTOのUserInfo 
    (ID、ユーザ名、パスワード、性別、SAL)
    (E_ID、e_username、e_password、e_sex、e_sal); 
END; 

  -コール1。
DECLAREの
  ID VARCHAR(32)、
  ユーザ名VARCHAR(20)と、
  パスワードVARCHAR(20)と、
  セックスVARCHAR(2); 
  SAL番号(20です)。 
BEGIN
  ID:= 'asdfasdfa'; 
  ユーザ名:= 'text11'; 
  パスワード:= 'PAS'; 
  性別:= 'M'; 
  SAL:= 2000; 
  proc_test(E_ID => ID、
            e_username =>ユーザ名、
            e_password =>パスワード、
            = e_sex>セックス、
            e_sal => SAL); 
  COMMIT; 
END; 

のUserInfoからSELECT *; -データが正常に挿入された参照

 

 

 

 

 

 

---调用2 
始める
  proc_test(E_ID => 'DD'、e_username => 'A'、e_password => 'AA'、e_sex => 'D'、=、> 1000 e_sal)。
  コミット; 
終わり; 
-调用3 
コールproc_test(E_ID => 'DD'、e_username => 'A'、e_password => 'AA'、e_sex => 'D'、e_sal => 1000)。
コミット;

 

 

 

通話中のjava:

 

パブリック静的ボイド挿入()はClassNotFoundExceptionが、のSQLException {スロー
		":オラクル:JDBCシン:@localhost:1521:ORCL"文字列のURLを=。
		文字列名= "user2が"; 
		文字列のPWD = "user2が"; 
		文字列DRIVERNAME = "oracle.jdbc.driver.OracleDriverと"; 
		Class.forNameの(DRIVERNAME)。
		接続の接続=したDriverManager.getConnection(urlには、名前、PWD)。
		CallableStatementの呼=接続
				.prepareCall( "呼び出しPROc_TEST(E_ID => 'DD'、e_username => 'A'、e_password => 'AA'、e_sex => 'D'、=> 1000 e_sal)")。
		//执行存储过程
		ブールB = call.execute()。
		(B =真){場合
			のSystem.out.println( "!成功插入"); 
		} 
		connection.close(); 
	}

 

 

 

 

- 2.戻りパラメータを作成します

 

入力パラメータ--in、出力パラメータの外にある
   CREATE OR手順(VARCHARでT、REPLACE proc_test1 
                                                       AS R&LT OUT VARCHAR)を
   開始
     
     WHERE名等RからSELECT COUNT(*)INTO&LTのUserInfo T; 
   END; 
-呼び出し、
 -マルチラインステートメントを実行する'/'におけるDOSの端示し
  DECLARE outobj VARCHAR2(4); 
       BEGIN 
             proc_test1(T => 'A'は、R => outobj); 
               DBMS_OUTPUT.PUT_LINE( 'outobj =' || outobj ); 
       END;

通話中のjava:

 

+ testPrint)。
		conn.close();
	}

 

 

 

 

- 3.結果でクエリを作成します。

- 3. Oracleのストアドプロシージャは値を返しませんので、すべての戻り値がアウトパラメータに置き換えられ、それは、リストが例外ではないですが、あなたは一般的なパラメータを使用することはできませんので、それは、コレクションですので、あなたがpagkageを使用する必要があります。 2つの部分に分割された

パッケージをビルドするために、--3.1。次のように:
CREATE OR REPLACEパッケージtestpackageをAS 
  型TEST_CURSOR REFはカーソルです; 
END; 

--3.2、ストアドプロシージャ、ストアドプロシージャを構築する:
手順TESTCを作成するか、または交換してください(p_cursor OUTのtestpackage.test_cursor)IS 
始める
  ためのオープンp_cursor 
    のUserInfoからSELECT *を; 
エンド;

通話中のjava:

 

静的ボイドが、のSQLException {ClassNotFoundExceptionがスロー)(公共SELECT 
		;文字列のURL = "ORCL:オラクル:薄い:@localhost:1521 JDBC" 
		文字列名= "user2が"; 
		文字列のPWD = "user2が"; 
		文字列DRIVERNAME =「のoracle.jdbcを.driver.OracleDriver "; 
		Class.forNameの(DRIVERNAME); 
		接続CONN =したDriverManager.getConnection(urlには、名前、PWD); 
		CallableStatementのprocの= conn.prepareCall("コールTESTC()「?); //ストアドプロシージャ
		proc.registerOutParameter (1、oracle.jdbc.OracleTypes.CURSOR); //設定された出力パラメータが第1カーソル、カーソル・タイプのパラメータである。
		proc.execute(); //は、実行
		のResultSetのRS =(ResultSetの)proc.getObject( 1)。 //は、最初のパラメータがカーソルで、ResultSetの型に変換得る
		(rs.next())//データを取得しながら、
		{
			System.out.println( "ID:" + rs.getString( "ID")+ "\ tusername:" 
					+ rs.getString( "ユーザ名")+ "\ tinsertdate:" 
					+ rs.getString( "insertdate")) ; 

		} 
	}

 

 

 

4.他のストアドプロシージャを呼び出すことができますストアドプロシージャを作成します。

 

-------------------------- 3例は、
作成したりプロシージャsp_name(中defaultVar置き換える VARCHAR2のデフォルトの「A」) - 、デフォルトのパラメータをそうでない場合は秩序パラメータに注意を払うように、パス
 AS 
  -変数の宣言、各宣言はセミコロンで終わります。初期化することができるステートメント
  VARCHAR2 robj;(4)
  VAR2番号(20):; = 123 

開始
  -文字列の連結||と
  DBMS_OUTPUT.PUT_LINE( 'ISOK:' || 'ABC'); 

  -他の記憶装置へのコールプロセス
  proc_test1(T => 'A'は、R => robj); 
  DBMS_OUTPUT.PUT_LINE( 'R&LT =' || R&LT); 

END; -格納処理が終了

-呼び出す

開始
  SP_NAME( 'A'); 

末端と、

おすすめ

転載: www.cnblogs.com/klb561/p/11294314.html