最初の実際の PL/SQL ストアド プロシージャが完成しました。このストアド プロシージャは期待どおりに動作します。私は PL/SQL を初めて使用します。コードの間違いや不適切な点を指摘していただけますか?
このコードは、命名規則を想定しています。たとえば、「t_company」テーブルは「companyId」を主キーとして使用し、そのタイプは数値です。
どうもありがとうございました。
create or replace
package body test_erp AS
procedure init_data is
begin
logMessage('procedure init_data');
SAVEPOINT do_insert;
insert into t_company(companyId, companyName) values(gen_key('t_company'), 'IBM');
COMMIT;
exception
WHEN OTHERS THEN
rollback to do_insert;
logMessage('roll back , due to '|| SQLERRM);
end init_data;
end test_erp;
この関数を呼び出します
create or replace
function gen_key(tblName varchar2)
return number is
l_key number := 1000;
l_tmpStr varchar(2000); -- not good, how to fix it ?
begin
l_tmpStr := substr(tblName, 3, length(tblName));
EXECUTE IMMEDIATE ' SELECT CASE WHEN MAX('||l_tmpStr||'Id) IS NULL THEN 1000 ELSE MAX('||l_tmpStr||'Id)+1 END FROM '|| tblName into l_key;
logmessage('gen primary key '|| tblName ||' '||l_key);
return l_key;
end;