CREATE PROCEDURE procname(parameter_list) characteristics language
code_body
CREATE PROC procname(parameter_list) characteristics language
code_body| 生成するストアド・プロシージャの名前。識別子です。このプロシージャ名には、修飾なし (StoreName) と修飾付き (Patient.StoreName) のどちらでも使用できます。パラメータを指定しない場合でも、 |
|
| プロシージャのプログラム・コード SQL プログラム・コードの開始には BEGIN キーワードを使用し、終了には END キーワードを使用します。 Caché ObjectScript プログラム・コードは中括弧で囲みます。 |
CREATE PROCEDURE UpdatePay (IN Salary FLOAT DEFAULT '0', IN Name VARCHAR(50), INOUT PayBracket VARCHAR(50) DEFAULT 'NULL') BEGIN UPDATE Sample.Person SET Salary = :Salary WHERE Name=:Name ; END
| メソッド・キーワード | 意味 |
|---|---|
| FOR |
メソッドを生成するクラス名を指定します。そのクラスが存在しない場合は、新規作成します。メソッド名を修飾することにより、クラス名を指定することもできます。FOR 節で指定されたクラス名の方が、メソッド名の修飾により指定されたクラス名よりも優先されます。 |
| FINAL | サブクラスによってメソッドがオーバーライドされないように指定します。既定では、メソッドは最終ではありません。FINAL キーワードは、サブクラスによって継承されます。 |
| PRIVATE | メソッドがそれ自身のクラス、またはサブクラスの他のメソッドによってのみ起動できることを指定します。既定ではメソッドはパブリックで、制限なしに起動できます。この制限はサブクラスによって継承されます。 |
| RETURNS |
メソッドに対する呼び出しによって返される値のデータ型を指定します。RETURNS が省略されると、メソッドは値を返すことができません。この仕様はサブクラスによって継承されます。 |
| SELECTMODE |
メソッドのコンパイルに使用されるモードを指定します。使用可能な値は、LOGICAL、ODBC、RUNTIME、DISPLAY です。既定は LOGICAL です。 |
| クエリ・キーワード | 概要 |
|---|---|
| CONTAINID |
フィールドが存在する場合は、どのフィールドが ID を返すかを指定します。CONTAINID を ID を返す列の番号に設定するか、または ID を返す列が存在しない場合は 0 を設定します。Caché では、指定されたフィールドが実際に ID を含んでいるかどうかの検証が行われないため、ユーザの入力の誤りによってデータの不一致が起こる可能性があります。 |
| FOR |
メソッドを生成するクラス名を指定します。そのクラスが存在しない場合は、新規作成します。メソッド名を修飾することにより、クラス名を指定することもできます。FOR 節で指定されたクラス名の方が、メソッド名の修飾により指定されたクラス名よりも優先されます。 |
| FINAL | サブクラスがメソッドをオーバーライドできないように指定します。既定では、メソッドは最終ではありません。FINAL キーワードは、サブクラスによって継承されます。 |
| RESULTS |
データ・フィールドをクエリで返された順序で指定します。各フィールドには、列名、データ型 (既定で属性に割り当てられた型と異なる場合)、そしてオプションで見出しを指定します。これらフィールドの特性はコロンで区切ります。結果セット内の異なるフィールドはコンマで区切ります。 LANGUAGE SQL の場合、クエリが SELECT * でない限り RESULTS キーワードを省略することができます。RESULTS キーワードを省略する場合、ROWSPEC がクラス・コンパイル中に自動生成されます。 |
| SELECTMODE |
クエリをコンパイルするために使用するモードを指定します。使用可能な値は、LOGICAL、ODBC、RUNTIME、DISPLAY です。既定は RUNTIME です。 |
WRITE !,"Creating a procedure" &sql(CREATE PROCEDURE PersonStateSP() BEGIN SELECT Name,Home_State FROM Sample.Person ; END) IF SQLCODE=0 { WRITE !,"Created a procedure" } ELSEIF SQLCODE=-361 { WRITE !,"Procedure already exists" } ELSE { WRITE !,"SQL error: ",SQLCODE }
WRITE !,"Deleting a procedure" &sql(DROP PROCEDURE SAMPLES.PersonStateSP) IF SQLCODE=0 { WRITE !,"Deleted a procedure" } ELSEIF SQLCODE=-362 { WRITE !,"Procedure did not exist" } ELSE { WRITE !,"SQL error: ",SQLCODE }
CREATE PROCEDURE UpdateSalary ( IN SSN VARCHAR(11), IN Salary FLOAT ) FOR Sample.Employee BEGIN UPDATE Sample.Employee SET Salary = :Salary WHERE SSN = :SSN; END
CREATE PROCEDURE Sample_Employee.GetTitle( INOUT pHandle %SQLProcContext, IN SSN VARCHAR(11), INOUT Title VARCHAR(50) ) RETURNS VARCHAR(30) FOR Sample.Employee LANGUAGE OBJECTSCRIPT { NEW SQLCODE,%ROWCOUNT &sql(SELECT Title INTO :Title FROM Sample.Employee WHERE SSN = :SSN) IF $GET(pHandle)'=$$$NULLOREF { SET pHandle.SQLCode=SQLCODE SET pHandle.RowCount=%ROWCOUNT } QUIT }
| Copyright © 1997-2006, InterSystems Corp. | Build: Caché v5.1 (826U-0) | Last updated: 2006-03-03 02:11:28 | Source: RSQL_createprocedure.xml |