初学oracle,有两条sql语句不会写....实现以下功能:1.判断如果A已经存在,则删除A(A可为表,用户,视图等)
  if ....
  drop table A
2.创建一序列,它的当前值为上条查询语句的结果
  x=select count(*) from A  create sequence start with x....

解决方案 »

  1.   

    1 可以查询相关的数据字典
    2 用动态sql
      

  2.   

    1. 在dba_objects里面看看,可以做到
    2. 动态sql
      

  3.   

    1、既然想删除,那就别判断了,直接drop。如果非要判断,那就到user_objects中找。
    2、
    create or replace procedure cr is
     tsql varchar2(100);
     maxnum number;
    begin
      select count(*) into maxnum from ab;
      tsql := 'create sequence seqtest start with '||maxnum;
      execute immediate tsql;
    end cr;不过,此时的用户要显性的赋予 create sequence权限。
      

  4.   

    回答你1的问题
    CREATE OR REPLACE PROCEDURE test(vc_i_tableame   IN VARCHAR2, --表名
                                     out_sql OUT VARCHAR2) IS
     i_is_extis   NUMBER(2); --表是否存在标示
    begin
    SELECT COUNT(*)
       INTO   i_is_extis
       FROM   user_tables
       WHERE  upper(table_name) = '表名';   IF i_is_extis <> 0
       THEN
          EXECUTE IMMEDIATE 'drop table 表名';
       END IF;   EXECUTE IMMEDIATE 'SELECT COUNT(*)  FROM user_tables WHERE table_name = lower(:vc_i_tableame) or  table_name = upper(:vc_i_tableame)'
          INTO i_is_extis
          USING vc_i_tableame, vc_i_tableame;   IF i_is_extis = 0
       THEN
          out_sql := vc_i_tableame || ' 表不存在';
          RETURN;
       END IF;
      

  5.   

    上面的回复少了end test;呵呵
      

  6.   

    谢谢大家,两个问题我已经解决
    都是用declare声明一个变量,再继续进行但楼上的各位兄弟写的procedure我还真不会使用,在toad里执行不了(没有反应),更别说在脚本里调用...procedure要怎么使用啊?我加了exec procedure
      

  7.   

    举个表的例子:SQL> select count(1) from t;  COUNT(1)
    ----------
             2

    SQL> select tsequence.nextval from dual;
    select tsequence.nextval from dual
           *
    第 1 行出现错误:
    ORA-02289: 序列不存在
    SQL> ed
    已写入 file afiedt.buf  1  declare
      2    v_count int default 0;
      3  begin
      4    execute immediate 'select count(1) from &table_name ' into v_count;
      5    execute immediate 'drop table &&table_name ';
      6    execute immediate 'create sequence &seqence_name start with '|| v_count;
      7  exception
      8    when others then
      9    dbms_output.put_line(sqlerrm);
     10* end;
    SQL> /
    输入 table_name 的值:  t
    原值    4:   execute immediate 'select count(1) from &table_name ' into v_count;新值    4:   execute immediate 'select count(1) from t ' into v_count;
    输入 table_name 的值:  t
    原值    5:   execute immediate 'drop table &&table_name ';
    新值    5:   execute immediate 'drop table t ';
    输入 seqence_name 的值:  tsequence
    原值    6:   execute immediate 'create sequence &seqence_name start with '|| v_c
    ount;
    新值    6:   execute immediate 'create sequence tsequence start with '|| v_count
    ;PL/SQL 过程已成功完成。SQL> select count(1) from t;
    select count(1) from t
                         *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在

    SQL> select tsequence.nextval from dual;   NEXTVAL
    ----------
             2SQL>
      

  8.   

    恩恩,ls的我已经知道了,十分感谢现在就是他们说的procedure我还不知道咋用exec procedure 在toad和plus里都没啥反应
      

  9.   

    exec procedure_name;
    show error;看看有什么错误
      

  10.   


    首先要 create or replace 创建一个过程然后 exec procedure_name; 你在sqlplus界面中看看