如果使用oracle sql developer不存在则创建序列

时间:2013-11-04 14:19:18

标签: oracle-sqldeveloper

我正在尝试创建创建序列的过程(如果它不存在) 并返回序列名称,以便我可以使用它

create or replace
PROCEDURE CREATESEQ 
(
  TableName IN VARCHAR2  
, CloumnName IN VARCHAR2  
, pSeq_name out VARCHAR2
) AS 
Seq_name varchar2(100);
vCounter number;
BEGIN

Seq_name:=tablename||cloumnname;
vCounter :=0;
  --  dbms_output.put_line(Seq_name);

SELECT count(1)
  INTO vCounter
  FROM user_sequences
  WHERE sequence_name = Seq_name;

IF vCounter > 0 THEN
    pSeq_name:=seq_name;
else
   EXECUTE IMMEDIATE  'create sequence '||Seq_name;
    pSeq_name:=seq_name;
END IF ;
END CREATESEQ;

当我尝试像这样执行CREATESEQ程序时

DECLARE
  TABLENAME VARCHAR2(200);
  CLOUMNNAME VARCHAR2(200);
  PSEQ_NAME VARCHAR2(200);
BEGIN
  TABLENAME := 'Sections';
  CLOUMNNAME := 'SectionID';

  CREATESEQ(
    TABLENAME => TABLENAME,
    CLOUMNNAME => CLOUMNNAME,
    PSEQ_NAME => PSEQ_NAME
  );

  :PSEQ_NAME := PSEQ_NAME;
END;

我收到此错误

ORA-01031:特权不足
ORA-06512:在“TRAINING_AKHADIER.CREATESEQ”第23行 ORA-06512:第9行

欣赏任何建议

1 个答案:

答案 0 :(得分:1)

调用此过程的用户需要具有此权限且能够授予它的用户授予CREATE_ANY_SEQUENCE。

有效的学习方案:

  • 以拥有DBA的用户身份登录
  • 执行GRANT CREATE_ANY_SEQUENCE至YourSchemaOwnername;