求助关于oracle用存储过程常见表的问题!!

来源:百度知道 编辑:UC知道 时间:2024/06/05 01:05:45
编写一个存储过程,要求实现如下功能
输入参数:表名变量,参数类型为varchar2(200)
实现功能
步骤一:在存储过程中使用动态语句,判断表名为输入的表名参数的这个表是否存在,如果不存在,创建下面的表,如果存在,先删除掉该表,然后创建下面的表
Create table表名变量
( t1 date,
t2 varchar2(10));
步骤二:给这个表增加一个字段,字段名为t3,字段类型为varchar2(10)
步骤三:修改这个表的字段t2的数据类型为number型
步骤四:清空该表
步骤五:往新建表中插入两条样本数据
create or replace procedure p_train_ljz_dummysql
( ljz_table_name in varchar2) is

n number;
begin

n:=0;
Select count(*) into n
from user_tables
where table_name=ljz_table_name ;
if n>0 then
execute immediate 'drop table ljz_table_name '
end if;
execute immediate ' create table ljz_table_name
( t1 date,
t2 varchar2(10) )';

execute immediate ' alter table ljz_table_name add t3 varchar2(10)';
execute immediate ' alter table ljz_table_name modify t2 number'

错误1:Select count(*) into n
from user_tables
where table_name='LJZ_TABLE_NAME' ;
这个地方ljz_table_name 表名要大写,并且要用单引号引起来
错误2:最后一个commit不在动态语句中,所以引号引到values (20090201,200,'bbb') '这个位置
错误3:清空该表最好的用法是truncate table ljz_table_name;
delete是一条条删,而truncate是直接清空,并且如果用delete的时候根本不用动态sql
错误4:执行动态sql的时候?能直接象你这么运行吗?应该定义个变量v_sql,然后再执行v_sql='alter table ljz_table_name modify t2 number';类似于这种
错误5:commit; '; 最后一个commit后只需要一个分号

暂时发现这些,其他的有待观察
-----补充--------
错误6:在动态语句中,字符型数据要用两个单引号的,譬如
' insert into ljz_table_name(t1,t2,t3)
values (20090101,100,'aaa');应改成
' insert into ljz_table_name(t1,t2,t3)
values (20090101,100,''aaa'');

错误7:execute immediate ' insert into ljz_table_name(t1,t2,t3)
values (20090101,100,'aaa'); 你分号前少个单引号
------------------------------------------------------
下边是给你改好的,自己比对吧,运行是能运行,但结果好像不太对