CREATE OR REPLACE PROCEDURE grantUserProjectAccess(
in_user_id IN PROJECT_ACCESS.USER_ID%TYPE,
in_project_object_id IN PROJECT_ACCESS.PROJECT_OBJECT_ID%TYPE,
out_error OUT VARCHAR2
)
AS
v_project_name PROJECT_ACCESS.PROJECT_NAME%TYPE;
BEGIN
SELECT project_name
INTO v_project_name
FROM project
WHERE project_object_id = in_project_object_id;
INSERT INTO project_access (
user_id,
project_object_id,
project_access_id,
project_access,
project_name
) VALUES (
in_user_id,
in_project_object_id,
PROJECT_ACCESS_SEQ.NEXTVAL,
'Y',
v_project_name
);
out_error := NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
out_error := 'Project Not Found';
WHEN DUP_VAL_ON_INDEX THEN
out_error := 'Duplicate Entry';
END;
/
(注:あなたは非常に良い理由がない限り、内部手続きをコミット呼び出さないでください - プロシージャを呼び出す最も外側のブロックのデータをコミットする - プロシージャの呼び出しをネストすることができます。必要に応じて、シーケンス全体にROLLBACK
を発行します手続きの実施。部分的なロールバックのみを行う場合は、SAVEPOINT
を使用することを検討してください。
出典
2017-01-20 12:29:51
MT0
サンプルデータと欲望の結果は、あなたがしたいことを明確にします。あなたの質問には、あなたが提供するデータモデルで特定されていない "userName"、 "param"、 "hard code value"のようなものも含まれています。 –
私はプロジェクトレコードからproject_accessテーブルにレコードを挿入したい – user1213199
User_ID-はプロジェクトIDまたはプロジェクトテーブルとしてProject_object_idのparamでなければなりませんProject_access_idはシーケンスによってProject_accessがすべての行でYとして生成されますプロジェクト名はprojecのプロジェクト名でなければなりません – user1213199