システム ストアド プロシージャ
PSQL システム ストアド プロシージャのリファレンス
以下のトピックでストアド プロシージャについて説明します。
PSQL システム ストアド プロシージャ
システム ストアド プロシージャは、データ定義言語(DDL)では取り扱われない管理タスクや情報タスクの遂行に利用できます。システム ストアド プロシージャには psp_ プレフィックスが付きます。
メモ: psp_ プレフィックスはシステム ストアド プロシージャの名前に使用されるので、psp_ プレフィックスを付けたストアド プロシージャは作成しないでください。システム ストアド プロシージャと同じ名前を持つユーザー作成のストアド プロシージャは決して実行されません。
次の表は、現在サポートされているシステム ストアド プロシージャの一覧を示します。
特段の記述がない限り、システム ストアド プロシージャのコード例は、PSQL で提供される Demodata サンプル データベースまたは PSQL システム テーブルを参照しています。PSQL ファイルのデフォルトの保存場所については、『Getting Started With PSQL』の PSQL ファイルはどこにインストールされますか?を参照してください。
システム ストアド プロシージャをデータベース(A とします)のコンテキストで実行し、セキュリティで保護されたデータベース(B とします)から情報を取得しようとすると、エラー メッセージが表示されます。セキュリティで保護されたデータベースの情報をほかのデータベースから取得することはできません。
psp_columns
現在のデータベースまたは指定されたデータベースから、特定テーブルの列の一覧とそれに関連する情報を返します。
構文
call psp_columns(['database_qualifier'], 'table_name', ['column_name'])
引数
返される結果セット
create table tx (c_binary BINARY(10),
                 c_char CHAR(10),
                 c_tinyint TINYINT,
                 c_smallint SMALLINT,
                 c_int INT,
                 c_bigint BIGINT,
                 c_utinyint UTINYINT)
call psp_columns(, 'tx',)
結果セット
凡例:P = Precision; L = Length; S = Scale; R = Radix; N = Nullable; R = Remarks
============ 
mydatabase という名前のデータベースに tx というテーブルが含まれているとします。
call psp_columns('mydatabase', 'tx', )
結果セット
凡例:P = Precision; L = Length; S = Scale; R = Radix; N = Nullable; R = Remarks
============ 
call psp_columns('mydatabase', 'tx', 'c_binary')
結果セット
凡例:P = Precision; L = Length; S = Scale; R = Radix; N = Nullable; R = Remarks
エラー状況
database_qualifier が空文字列である
database_qualifier が未定義のデータベースである
table_name がデータベース内に定義されていない
table_name がヌルである
table_name が空文字列である
column_name が空文字列である
column_name がテーブル内に定義されていない
psp_column_attributes
現在のデータベースまたは指定されたデータベースから、列属性の一覧とそれに関連する情報を返します。
構文
call psp_column_attributes(['database_qualifier'], ['table_name'], ['column_name'])
引数
返される結果セット
create table tx (c_binary binary (10) default 01,
                 c_char char (11) default 'thisisatest',
                 c_tinyint TINYINT,
                 c_SMALLINT SMALLINT,
                 c_int INT,
                 c_bigint BIGINT,
                 c_utinyint uTINYINT)
call psp_column_attributes(, , )
結果セット
============ 
create table tlogicalmv (col1 integer, col2 char(20))
alter table tlogicalmv psql_move col1 to 2
call psp_column_attributes(, 'tlogicalmv' , )
結果セット
============ 
call psp_column_attributes(, 'tx', 'c_binary')
結果セット
エラー状況
database_qualifier が空文字列である
database_qualifier が未定義のデータベースである
table_name がデータベース内に定義されていない
table_name がヌルである
table_name が空文字列である
column_name が空文字列である
column_name がテーブル内に定義されていない
psp_column_rights
現在のデータベースまたは指定されたデータベースから、特定テーブルの列権限の一覧とそれに関連する情報を返します。
メモ: このシステム ストアド プロシージャは、GRANT 構文によって明示的に指定されている列のアクセス権についてのみ一覧を返します。
構文
call psp_column_rights(['database_qualifier'], 'table_name', ['column_name'], ['user_name'])
引数
返される結果セット
Demodata データベースの Dept テーブルに対して次の権限を付与した後、列権限を取得します。
GRANT SELECT(Name, Building_Name) ON Dept TO John
GRANT UPDATE(Name) ON Dept TO Mary
GRANT INSERT(Building_Name) ON Dept TO John
 
Call psp_column_rights(,'Dept', ,'%')
結果セット
メモ: Master ユーザーには列のアクセス権が明示的に定義されていないため、psp_column_rights はそのユーザーの結果を返しません。
ユーザー John がデータベースにログオンしているとします。次のステートメントは、ユーザー John が Dept テーブルに対して持っている列権限を出力します。
call psp_column_rights ('demodata', 'Dept', ,)
結果セット
メモ: ユーザーにテーブル レベルの権限が付与されている場合は(例:GRANT SELECT ON Dept TO Mary)、psp_column_rights を呼び出してもアクセス権は何も返されません。アクセス権は特定の列ではなくテーブルに付与されています。
次のステートメントは、現在のユーザーを示す列 Name が Dept テーブルに対して持っている列権限を出力します。
call psp_column_rights ('demodata', 'dept', 'name',)
結果セット
次のステートメントは、ユーザー Mary が Dept テーブルに対して持っている列権限を出力します。
call psp_column_rights('demodata', 'dept', , 'Mary')
結果セット
エラー状況
database_qualifier が空文字列である
table_name がヌルである
table_name が空文字列である
column_name が空文字列である
user_name が空文字列である
psp_fkeys
現在のデータベース内の特定テーブルの外部キー情報を返します。
構文
call psp_fkeys(['table_qualifier'], 'pkey_table_name', ['fkey_table_name'])
引数
返される結果セット
CREATE TABLE Employee
(
    Id INTEGER NOT NULL,
    Name VARCHAR(50) NOT NULL,
    SupId INTEGER NOT NULL
)
 
ALTER TABLE Employee
    ADD CONSTRAINT EmpPkey
    PRIMARY KEY(Id)
 
ALTER TABLE Employee
    ADD CONSTRAINT ForgnKey
    FOREIGN KEY(SupId) REFERENCES
    Employee(Id) ON DELETE CASCADE
 
call psp_fkeys(,'Employee',)
結果セット
凡例:PkQ = Pkey_table_qualifier; PkO = Pkey_table_owner; PkT = Pktable_name; PkCol = Pk_column_name; Seq = Key_seq; FkQ = Fktable_qualifier; FkO = Fktable_owner; FkT = Fktable_name; FkCol = Fkcolumn_name; UR = Update_rule; DR = Delete_rule; Pk = Pk_name; FK = Fk_name
エラー状況
table_qualifier が空文字列である
pKey_table_name が空文字列である
pKey_table_name がヌルである
fKey_table_name が空文字列である
psp_groups
現在のデータベースまたは指定されたデータベースから、グループの一覧とそれに関連する情報を返します。
構文
call psp_groups(['database_qualifier'], ['group_name'])
引数
返される結果セット
Demodata サンプル データベースに 2 つのグループ、DevGrp1 と DevGrp2 が定義されているとします。
call psp_groups(,)
結果セット
============ 
call psp_groups('Demodata', 'D%')
結果セット
エラー状況
database_qualifier が空文字列である
group_name が空文字列である
psp_help_sp
現在のデータベースまたは指定されたデータベースから、特定のストアド プロシージャの定義テキストを返します。
構文
call psp_help_sp('[database_qualifier'], 'procedure_name')
引数
返される結果セット
Demodata サンプル データベースには、"Myproc" として保存された次のようなストアド プロシージャが含まれているとします。
Create procedure Myproc(:a integer, OUT :b integer) as
Begin
Set :a = :a + 10;
Set :b = :a;
End
次のステートメントは、現在のデータベース内にあるストアド プロシージャ "Myproc" の定義テキストを出力します。
call psp_help_sp(, 'Myproc')
結果セット
============ 
"wsrde" という名前のデータベースに、"Myproc1" として保存された次のようなストアド プロシージャが含まれているとします。
Create procedure Myproc1(:a integer) returns (name char(20))
as
Begin
Select name from employee where Id =:a;
End
次のステートメントは、データベース "wsrde" 内にあるストアド プロシージャ "Myproc1" の定義テキストを出力します。
call psp_help_sp('wsrde', 'Myproc1')
結果セット
エラー状況
database_qualifier が空文字列またはヌルである
procedure_name がヌルである
procedure_name が空文字列である
psp_help_trigger
現在のデータベースまたは指定されたデータベースから、トリガーの定義テキストを返します。
構文
call psp_help_trigger (['database_qualifier'], 'trigger_name')
引数
返される結果セット
 
次のステートメントにより、'MyInsert' トリガーの定義が出力されます。
CREATE TABLE A
(
col1 INTEGER,
col2 CHAR(255)
)
 
CREATE TABLE B
 
(
col1 INTEGER,
col2 CHAR(255)
)
 
CREATE TRIGGER MyInsert
AFTER INSERT ON A
FOR EACH ROW
INSERT INTO B VALUES
(NEW.col1, NEW.col2)
 
call psp_help_trigger(,'MyIns%')
結果セット
エラー状況
database_qualifier が空文字列である
trigger_name がヌルである
trigger_name が空文字列である
psp_help_udf
現在のデータベースまたは指定されたデータベースから、特定のユーザー定義関数(UDF)のテキストを返します。
構文
call psp_help_udf (['database_qualifier'], 'udf_name')
引数
返される結果セット
call psp_help_udf(, 'Myfunction')
結果セット
============ 
call psp_help_udf('mydbase', 'Get%')
結果セット
エラー状況
database_qualifier が空文字列である
udf_name がヌルである
udf_name が空文字列である
psp_help_view
現在のデータベースまたは指定されたデータベースから、ビューの定義テキストを返します。
構文
call psp_help_view(['database_qualifier'], 'view_name')
引数
返される結果セット
Demodata サンプル データベースに次のビューが存在するとします。
CREATE VIEW vw_Person (lastn,firstn,phone) AS
SELECT Last_Name, First_Name, Phone
FROM Person
次のステートメントは、Demodata データベース内のビュー "vw_Person" の定義テキストを返します。
call psp_help_view(,'vw_Person')
または
call psp_help_view(,'vw_%')
結果セット
エラー状況
database_qualifier が空文字列である
view_name がヌルである
view_name が空文字列である
psp_indexes
指定したテーブルに定義されているインデックスの一覧を返します。また、各インデックスについて、X$Index テーブルに保存されているとおりにインデックス プロパティを列挙します。
構文
call psp_indexes(['table_qualifier'], ['table_name'])
引数
返される結果セット
call psp_indexes(,)
結果セット
凡例:Qual = Table_qualifier; TO = Table_owner; TN = Table_name; IN = Index_name; IT = Index_type; CN = Column_name; Opos = Ordinal_position; Dup = Duplicates_allowed; UP = Updatable; Case = Case_sensitive; A/D = Asc_desc; NI = Named_index
============ 
call psp_indexes('demodata', 'Dep%')
結果セット
凡例:Qual = Table_qualifier; TO = Table_owner; TN = Table_name; IN = Index_name; IT = Index_type; CN = Column_name; Opos = Ordinal_position; Dup = Duplicates_allowed; UP = Updatable; Case = Case_sensitive; A/D = Asc_desc; NI = Named_index
エラー状況
database_qualifier が空文字列である
table_name が空文字列である
psp_pkeys
現在のデータベースまたは指定されたデータベースから、特定テーブルの主キー情報を返します。
構文
call psp_pkeys(['pkey_table_qualifier'] 'table_name')
引数
返される結果セット
次のステートメントは、'pkeytest1' テーブルに定義されている主キーに関する情報を返します。
CREATE TABLE pkeytest1
(
  col1 int NOT NULL,
  col2 int NOT NULL,
  col3 VARCHAR(20) NOT NULL,
  PRIMARY KEY(col1, col2),
  UNIQUE(col3)
)
 
call psp_pkeys(,'pkeytest1')
結果セット
エラー状況
pkey_table_qualifier が空文字列である
table_name がヌルである
table_name が空文字列である
psp_procedure_rights
現在のデータベースまたは指定されたデータベースから、特定ストアド プロシージャのプロシージャ権限の一覧とそれに関連する情報を返します。ストアド プロシージャは、信頼されるものでも信頼されないものでもかまいません。信頼されるオブジェクトと信頼されないオブジェクトを参照してください。
構文
call psp_procedure_rights(['database_qualifier'], ['procedure_name'], ['user_name'])
引数
返される結果セット
Demodata サンプル データベースに対して次の権限が存在するとします。
GRANT EXECUTE ON PROCEDURE Dept1_Proc TO John
GRANT ALTER ON PROCEDURE Dept1_Proc TO Mary
GRANT ALTER ON PROCEDURE Dept1_Proc TO John
GRANT EXECUTE ON PROCEDURE Proc2 TO Mary
GRANT ALTER ON PROCEDURE Proc2 TO Mary
GRANT ALTER ON PROCEDURE MyProc TO Mary
次のステートメントは、ユーザー "John" が "Dept1_Proc" ストアド プロシージャに対して持っている権限を出力します。
call psp_procedure_rights(,'Dept1_Proc', 'John')
結果セット
次のステートメントは、ユーザー "Mary" が "Proc2" ストアド プロシージャに対して持っている権限を出力します。
call psp_procedure_rights('demodata', '%Pr%', 'M%')
結果セット
エラー状況
database_qualifier が空文字列である
procedure_name が空文字列である
user_name が空文字列である
psp_rename
お使いのマシンが現在接続されているデータベース内の列、インデックス、関数、プロシージャ、テーブル、トリガー、またはビューの名前を変更します。
構文
call psp_rename('object_name','new_name','object_type')
引数
次のステートメントは、現在のデータベース内のストアド プロシージャ "checkstatus" の名前を "eligibility" に変更します。
call psp_rename('checkstatus', 'eligibility', 'PROCEDURE')
エラー状況
psp_rename から返されるすべてのエラーはステータス コード -5099 を使用します。『Status Codes and Messages』の-5099:ストアド プロシージャに関連するエラー状況を参照してください。
psp_stored_procedures
現在のデータベースまたは指定されたデータベースから、ストアド プロシージャの一覧とそれに関連する情報を返します。
構文
call psp_stored_procedures(['database_qualifier'], ['procedure_name'], ['procedure_type'])
引数
'SP' - ストアド プロシージャを返します
'SSP' - システム ストアド プロシージャを返します(この種類は現在サポートされていません)
メモ: システム ストアド プロシージャは、PSQL Control Center に表示されない内部データベース PERVASIVESYSDB に定義されています。
返される結果セット
現在のデータベース mydbase には 2 つのストアド プロシージャ、myproc1 と myproc2 が含まれているとします。次のステートメントは、それらに関する情報を一覧表示します。
Call psp_stored_procedures(, ,)
結果セット
1 完全な列名は、この名前の前に "procedure_" が付きます。たとえば、Procedure_qualifier や procedure_owner などのようになります。
============ 
次のステートメントは、PERVASIVESYSDB 内部データベースに含まれるストアド プロシージャに関する情報を一覧表示します。
call psp_stored_procedures('PERVASIVESYSDB', 'psp_u%', 'SP')
結果セット
1 完全な列名は、この名前の前に "procedure_" が付きます。たとえば、Procedure_qualifier や procedure_owner などのようになります。
エラー状況
database_qualifier が空文字列である
table_name が空文字列である
procedure_type が空文字列である
procedure_type が SP、SSP、またはヌル以外の値である
psp_tables
現在のデータベースまたは指定されたデータベースから、テーブルの一覧とそれに関連する情報を返します。
構文
call psp_tables(['database_qualifier'], ['table_name'], ['table_type'])
引数
'User table' - ユーザー テーブルのみ返します
'System table' - すべてのシステム テーブルを返します
返される結果セット
System table - テーブルがシステム テーブルの場合
User table - 任意のユーザーによって作成されたテーブルの場合
call psp_tables(,,)
結果セット
============ 
call psp_tables(, , 'user table')
結果セット
============ 
call psp_tables(, , 'system table')
結果セット
エラー状況
database_qualifier が空文字列である
table_name が空文字列である
table_type が空文字列である
table_type が 'system table'、'user table'、またはヌル以外の値である
psp_table_rights
現在のデータベースまたは指定されたデータベースから、特定テーブルのテーブル権限の一覧とそれに関連する情報を返します。
構文
call psp_table_rights(['database_qualifier'], ['table_name'], ['user_name'])
引数
返される結果セット
Demodata サンプル データベースに対して次の権限が存在するとします。
GRANT SELECT ON Dept TO John
GRANT ALTER ON Dept TO John
GRANT DELETE ON Dept TO John
GRANT SELECT ON Class TO Mary
GRANT ALTER ON Class TO Mary
次のステートメントは、ユーザー "John" が現在のデータベース(Demodata)の "Dept" テーブルに対して持っているテーブル権限を出力します。
call psp_table_rights(,'Dept', 'John')
結果セット
============ 
ユーザー "Mary" がデータベースにログオンしているとします。次のステートメントは、現在のユーザー(Mary)が Demodata データベースの "Class" テーブルに対して持っているテーブル権限を出力します。
call psp_table_rights('demodata', 'cl%', )
結果セット
エラー状況
database_qualifier が空文字列である
table_name が空文字列である
user_name が空文字列である
psp_triggers
現在のデータベースまたは指定されたデータベースから、トリガーの一覧とそれに関連する情報を返します。
構文
call psp_triggers(['database_qualifier'], ['table_name'])
引数
返される結果セット
現在のデータベースは mydbase であるとします。次のステートメントは、このデータベースに定義されているトリガーの一覧を返します。
CREATE TABLE A
(
  col1 INTEGER,
  col2 CHAR(255)
) ;
 
CREATE TABLE B
(
  col1 INTEGER,
  col2 CHAR(255)
) ;
 
CREATE TRIGGER Insert
  AFTER INSERT ON A
FOR EACH ROW
INSERT INTO B VALUES
(NEW.col1, NEW.col2);
 
call psp_triggers(,)
結果セット
エラー状況
database_qualifier が空文字列である
table_name が空文字列である
psp_udfs
現在のデータベースまたは指定されたデータベースから、ユーザー定義関数(UDF)の一覧とそれに関連する情報を返します。
構文
call psp_udfs(['database_qualifier'], ['udf_name'])
引数
返される結果セット
現在のデータベース mydbase には 2 つのユーザー定義関数、calcinterest と factorial が含まれているとします。
call psp_udfs(, )
結果セット
エラー状況
database_qualifier が空文字列である
udf_name が空文字列である
psp_users
現在のデータベースまたは指定されたデータベースから、ユーザーの一覧とそれに関連する情報を返します。
構文
call psp_users(['database_qualifier'], ['group_name'], ['user_name'])
引数
返される結果セット
現在のデータベース mydbase は、ユーザー John、Mary、および Michael と、グループ DevGrp および DevGrp1 を所有しています。
call psp_users(, , )
結果セット
============ 
call psp_users(, 'Devgrp', )
結果セット
エラー状況
database_qualifier が空文字列である
user_name がヌルである
group_name が空文字列である
psp_view_rights
現在のデータベースまたは指定されたデータベースから、特定ビューのビュー権限の一覧とそれに関連する情報を返します。ビューは、信頼されるものでも信頼されないものでもかまいません。信頼されるオブジェクトと信頼されないオブジェクト を参照してください。
psp_view_rights は、メタデータ バージョン 2 を使用するデータベースにのみ適用されます。
構文
call psp_view_rights(['database_qualifier'], ['view_name'], ['user_name'])
引数
返される結果セット
Demodata サンプル データベースに対して次の権限が存在するとします。
GRANT SELECT ON VIEW vw_Dept TO John
GRANT ALTER ON VIEW vw_Dept TO John
GRANT DELETE ON VIEW vw_Dept TO John
GRANT SELECT ON VIEW vw_Class TO Mary
GRANT ALTER ON VIEW vw_Class TO Mary
GRANT SELECT ON VIEW vw_Class TO Prakesh
次のステートメントは、ユーザー "John" が "vw_Dept" ビューに対して持っているビュー権限を出力します。
call psp_view_rights(,'vw_Dept', 'John')
結果セット
============ 
ユーザー "Mary" がデータベースにログオンしているとします。次のステートメントは、現在のユーザー(Mary)がサンプル データベース Demodata 内のすべてのビューに対して持っているビュー権限を出力します。
call psp_view_rights('demodata', , )
結果セット
============ 
次のステートメントは、ユーザー "Mary" が "vw_Class" ビューに対して持っているビュー権限を出力します。
call psp_view_rights('demodata', 'vw_C%', 'Mary')
結果セット
エラー状況
database_qualifier が空文字列である
view_name が空文字列である
user_name が空文字列である
psp_views
現在のデータベースまたは指定されたデータベースから、ビューの一覧とそれに関連する情報を返します。
構文
call psp_views(['database_qualifier'], ['view_name'])
引数
返される結果セット
メタデータ バージョン 2 の Demodata2 というデータベースに次のようなビューが存在するとします。
CREATE VIEW vw_Person (lastn,firstn,phone) WITH EXECUTE AS 'Master' AS
SELECT Last_Name, First_Name,Phone FROM Person;
次のステートメントは、現在のデータベースである Demodata2 内のビューの一覧を出力します。
call psp_views(, ,)
結果セット
============ 
次のステートメントは、Demodata データベース内にあるビュー "vw_Person" のビュー情報を出力します。
call psp_views('demodata', 'vw_P%')
結果セット
エラー状況
database_qualifier が空文字列である
view_name が空文字列である