我想完成以下题目:
(1)使用PL/SQL 建立一个帐户表(帐号,帐户名,余额)
并插入数据:(1,‘李四’,13000)
(2,‘王五’,100)我写的PL/SQL代码如下:DECLAREBEGIN
EXECUTE IMMEDIATE 'create table account_user(
userno char(10),
username char(12),
balance number
)'
insert into account_user values('1','存款',13000)
insert into account_user values('2','支票',100)
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
-----------------
问题:
1 执行通不过。我改试了好多回都通不过。
2 请大家帮忙指出我的错误之处,并将你的代码粘贴出来。
3 你的代码请务必是 执行通过 可以实现以上功能的代码。谢谢!
4 请使用PL/SQL写,不要把简单的SQL语句粘贴出来,因为通过简单的SQL语句其实很容易实现。
谢谢!
(1)使用PL/SQL 建立一个帐户表(帐号,帐户名,余额)
并插入数据:(1,‘李四’,13000)
(2,‘王五’,100)我写的PL/SQL代码如下:DECLAREBEGIN
EXECUTE IMMEDIATE 'create table account_user(
userno char(10),
username char(12),
balance number
)'
insert into account_user values('1','存款',13000)
insert into account_user values('2','支票',100)
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
-----------------
问题:
1 执行通不过。我改试了好多回都通不过。
2 请大家帮忙指出我的错误之处,并将你的代码粘贴出来。
3 你的代码请务必是 执行通过 可以实现以上功能的代码。谢谢!
4 请使用PL/SQL写,不要把简单的SQL语句粘贴出来,因为通过简单的SQL语句其实很容易实现。
谢谢!
解决方案 »
- 本机安装oracle 10 g即时客户端出现下面的问题求 大神解决
- oracle删除数据后如何收回磁盘空间
- 各位大哥,小弟有一个安装问题卡了两天了,那位能帮帮忙,急!
- length()问题求教?
- oracle9i fow windows 下被误删除的package能恢复吗?
- 请问Oracle中用哪个命令可以批量导出存储过程?
- 新手: ASP报错: "TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME "
- 在sqlserver中,datediff(mi,date1,date2),在oracle中怎么表示?
- 小弟现在想安装ORACLE,可是提示说要在hosts 中加入,本地IP等,请问怎么办?我用的是2000 server
- 一个DBMS_PIPE的问题?
- 【高手帮忙】我想知道学习数据库的步骤为dba做准备的学要怎么来学?
- oracle 记录增加删除问题,help me !!
create table account_user(
userno char(10),
username char(12),
balance number
);
insert into account_user values('1','存款',13000)
insert into account_user values('2','支票',100)
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END; 高不明白,你为什么用动态sql语句呢?
plsql块里面也是可以用create table的啊?
create table account_user(
userno char(10),
username char(12),
balance number
);
insert into account_user values('1','存款',13000);
insert into account_user values('2','支票',100);
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
忘记问你了,报什么ora错误呢?
EXECUTE IMMEDIATE 'create table account_user(
userno char(10),
username char(12),
balance number
)' ;
EXECUTE IMMEDIATE 'insert into account_user values(''1'',''存款'',13000)';
EXECUTE IMMEDIATE 'insert into account_user values(''2'',''支票'',100)';
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
because
DECLARE
BEGIN
EXECUTE IMMEDIATE 'create table account_user(
userno char(10),
username char(12),
balance number)';
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;can return successful,
and
DECLARE
BEGIN
insert into account_user values('1','deposit',13000) ;
insert into account_user values('2','cheque',100) ;
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;can return succefully too.but
DECLARE
BEGIN
EXECUTE IMMEDIATE 'create table account_user(
userno char(10),
username char(12),
balance number)';
insert into account_user values('1','deposit',13000) ;
insert into account_user values('2','cheque',100) ;
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;cannot return successfully.
BEGIN
EXECUTE IMMEDIATE 'create table account_user(
userno char(10),
username char(12),
balance number
)';
EXECUTE IMMEDIATE 'insert into account_user values(''1'',''存款'',13000)';
EXECUTE IMMEDIATE 'insert into account_user values(''2'',''支票'',100)';
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;这个可以编译成功的
sql在执行时要先分析sql语句,
当分析到这条时,因为table account_user还没有创建,
因此DB无法解析这一条语句,因而报错。可以将这两条insert语句用execute immediate 这种方式执行,
可以绕过db对语句的检查。
BEGIN
EXECUTE IMMEDIATE 'create table account_user(
userno char(10),
username char(12),
balance number)';
EXECUTE IMMEDIATE 'insert into account_user values(''1'',''deposit'',13000) ';
EXECUTE IMMEDIATE 'insert into account_user values(''2'',''cheque'',100) ';
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END; 这样就可以了
以前我也遇到这种情况
动态语句是在执行过程中根据脚本动态执行的
而普通的SQL语句在编译的时候就会执行
所以你的程序在时间上就成了 “先插入再造表”
当然是不行的如果你想学习动态语句,建议尝试在动态语句中使用DML操作:)希望对你有帮助哦