初学oracle,有两条sql语句不会写....实现以下功能:1.判断如果A已经存在,则删除A(A可为表,用户,视图等)
if ....
drop table A
2.创建一序列,它的当前值为上条查询语句的结果
x=select count(*) from A create sequence start with x....
if ....
drop table A
2.创建一序列,它的当前值为上条查询语句的结果
x=select count(*) from A create sequence start with x....
解决方案 »
- oracle查询新增用户数
- select数据into时出现ORA-01403数据不存在,但又不想事先select count(*),因为表里数据太多,这样会影响效率,请高手指教
- 用plsqldeveloper导数据问题
- 数据库迁移
- 请帮我确定下语句是否正确!谢谢!
- 怎么在已有的表中加约束
- 请问oracle9.2.0.1.0的参数文件在哪个位置?
- 为什么我的Enterprise Manager Console启动起来后只有网络选项卡,没有数据库等东西呢
- 简单问题:两个完全相同的oracle数据库是否可以在同一客户端同时使用?
- 怎样设计关于会员折扣的数据库表
- 服务器上有N个数据库 是不是要配置N监听?
- oracle 中sid与service_name
2 用动态sql
2. 动态sql
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权限。
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;
都是用declare声明一个变量,再继续进行但楼上的各位兄弟写的procedure我还真不会使用,在toad里执行不了(没有反应),更别说在脚本里调用...procedure要怎么使用啊?我加了exec procedure
----------
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>
show error;看看有什么错误
首先要 create or replace 创建一个过程然后 exec procedure_name; 你在sqlplus界面中看看