Oracle存储过程语法规则,不熟,我的错在哪里?求高手

PROCEDURE 编号规则
(
企业编号 IN NUMBER
, 表名 IN VARCHAR2
, 编号 OUT NUMBER
) AS
BEGIN
declare
n_key number;
v_cnt number;
begin transaction

set n_key:=企业编号*1000+1;
begin
select count(1) into v_cnt from dual
where exists (select 表名 from 编号表 where 表名=表名);
if v_cnt = 0 then
insert into 编号表 values(表名,n_key);
else

select n_key=编号 from 编号表 with (nolock) where 表名=表名;
set n_key:=n_key+1;
--update the key value by table name
update 编号表 set 编号=n_key where 表名=表名;

end if;
--set ouput value
set 编号=n_key;
--commit tran
commit transaction;
if(@@error>0)
rollback transaction;
END 编号规则;

你这个完全是 sqlserver的语法啊。

大致如下:
create or replace PROCEDURE 编号规则
(
企业编号 IN NUMBER
, p_表名 IN VARCHAR2
, 编号 OUT NUMBER
) AS

n_key number;
v_cnt number;

BEGIN

n_key:=企业编号*1000+1;
begin
select count(表名) into v_cnt from 编号表 where 表名=p_表名;
if v_cnt = 0 then
insert into 编号表 values(表名,n_key);
else

select 编号 into n_key from 编号表where 表名= p_表名;
n_key:=n_key+1;
--update the key value by table name
update 编号表 set 编号=n_key where 表名=p_表名;

end if;
--set ouput value
编号:=n_key;

commit;

EXCEPTION
WHEN OTHERS THEN

rollback ;
END 编号规则;

建议好好看看oracle的语法,然后再改吧:追问

CREATE TABLE "SCOTT"."编号表"
(
"企业编号" NUMBER,
"表名" VARCHAR2(20 BYTE),
"编号" NUMBER
)
这是我的表,帮我把存储过程改成Oracle的吧,分都给你啦,谢谢啦

追答

不是给你改好了吗?

大致就是这样的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-07
CREATE OR REPLACE PACKAGE BODY xxzr_test_pck IS
------------------------------------------
--xxzr_test_pck 包名
--pro_num_rule 编号规则
--p_enterprise_num 企业编号
--p_table_name 表名
--p_number 编号
--xxzr_test 编号表
-------------------------------------------
PROCEDURE pro_num_rule(p_enterprise_num IN NUMBER, p_table_name IN VARCHAR2, p_number OUT NUMBER) IS
ln_key NUMBER;
ln_cnt NUMBER;
BEGIN
BEGIN
ln_key := nvl(p_enterprise_num, 0) * 1000 + 1;

SELECT COUNT(1)
INTO ln_cnt
FROM dual
WHERE EXISTS (SELECT 1 FROM xxzr_test t WHERE t.table_name = p_table_name);

IF ln_cnt = 0 THEN

INSERT INTO xxzr_test VALUES (p_table_name, ln_key);

ELSE

SELECT nvl(t.key, 0) INTO ln_key FROM xxzr_test t WHERE t.table_name = p_table_name;
ln_key := ln_key + 1;
UPDATE xxzr_test t SET t.key = t.key + 1 WHERE t.table_name = p_table_name;

END IF;

p_number := ln_key;

COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
END;

END xxzr_test_pck;
相似回答