急: 如何用execute执行多条SQL语句?

anray 2002-06-20 12:12:28
急: 如何用execute执行多条SQL语句?
...全文
1584 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun9761 2002-07-14
  • 打赏
  • 举报
回复
5201314
PBsystem 2002-07-12
  • 打赏
  • 举报
回复
多条语名写入一个.sql文件
用osql 执行!

mynah8 2002-07-11
  • 打赏
  • 举报
回复
继续讨论...
WorldMobile 2002-06-20
  • 打赏
  • 举报
回复
把你的SQL语句放在存储过程中吧,这样速度还能快些
anray 2002-06-20
  • 打赏
  • 举报
回复
To 回复人: delphi_compiler(蘸水鱼):
ORACLE 中StoreProceduce 不支持"Create..."语句的,我现在就想用几条SQL同时执行去建多个表啊.
anray 2002-06-20
  • 打赏
  • 举报
回复
execute IMMEDIATE
我知道这样执行啊,但是这样只能执行一条SQL语句,要想执行多条就不知道怎样了.

不会是:execute IMMEDIATE SQL1;SQL2;SQL3;.....;......吧?这样我试过了,不行啊!!!!
delphi_compiler 2002-06-20
  • 打赏
  • 举报
回复
用存储过程行否?试试吧.
xingxing 2002-06-20
  • 打赏
  • 举报
回复
execute IMMEDIATE
gztitan 2002-06-20
  • 打赏
  • 举报
回复
其实是在程序中IMPORT 一个.SQL文件通过一次建立多个表,可以动态修改表结构!
mynah8 2002-06-20
  • 打赏
  • 举报
回复
按照jimly(一脚)的方法按理论应该可行。
以下是具体的程序:
(注意以下程序未经在orcal测试,但在mysql测试可行)

string ls_compart = '~r~n' + '/' + '~r~n'
//以上是orcal的分隔符
//如果是MSSQL及sybase将 '/' 改成 'go'
//如果ASA改成分号
//以上分隔符'~r~n'如果有问题,改成char(13)+char(10)试试
//即:string ls_compart = char(13)+char(10) + '/' + char(13)+char(10)

string ls_sql[], ls_sqlSyntax

ls_sql[1] = 'drop table Tab2 cascade constraints'
ls_sql[2] = 'drop table Tab1 cascade constraints'

ls_sql[3] = 'create table Tab1' + &
'(id VARCHAR2(8) not null, ' + &
' constraint PK_TAB1 primary key (id))'

ls_sql[4] = 'create table Tab2' + &
'(' + &
'id int not null,' + &
'name VARCHAR2(8) null,' + &
'constraint PK_TAB2 primary key (id)' + &
')'

ls_sql[5] = 'create index idx_tab2_name on Tab_2 (name asc)'

ls_sqlSyntax = ls_sql[1] + ls_compart
ls_sqlSyntax += ls_sql[2] + ls_compart
ls_sqlSyntax += ls_sql[3] + ls_compart
ls_sqlSyntax += ls_sql[4] + ls_compart
ls_sqlSyntax += ls_sql[5] + ls_compart

SQLCA.AutoCommit = TRUE //这句也许可以不要
EXECUTE IMMEDIATE :ls_sqlSyntax USING SQLCA ;
SQLCA.AutoCommit = FALSE
jimly 2002-06-20
  • 打赏
  • 举报
回复
不知你要在何处?存储过程中?程序中?一次创建多个表?
您是要必须在存储过程中执行一次创建多个表?
hammlet 2002-06-20
  • 打赏
  • 举报
回复
直接用;分开写多条就可以了
gztitan 2002-06-20
  • 打赏
  • 举报
回复
问题就是在如何分隔多个SQL语句,如何拼成一条SQL! 因为在ORACLE 中存储过程是不支持"CREATE, DROP"等语句. 如何一次CREATE多个TABLE?
jimly 2002-06-20
  • 打赏
  • 举报
回复
还有你那create好象少分号
jimly 2002-06-20
  • 打赏
  • 举报
回复
oracle学过几天,不熟呀。再有oracle 我也不知道如何一次导出所有语法。
不过拆分应该是没错的,不知分号如何。
再说你的文本写在代码中完全可以先执行drop再create
gztitan 2002-06-20
  • 打赏
  • 举报
回复 1
但是在ORACLE中出现ERROR! "PLS-00103 ENCOUNTERED THE SYMBOL "DROP" WHEN EXPECTING ONE OF THE FOLLOWING"

例子:

ls_sql = "Begin drop table ecs_"+as_campaignID+"_quest end;"


ls_sql = ls_sql+ "begin CREATE TABLE ecs_"+as_campaignID+"_quest ( "&
+"id_question varCHAR2(6) NOT NULL, "&
+"type_question CHAR (1) NOT NULL, "&
+"con_question varchar2(2000) NOT NULL, "&
+"se_quest CHAR(1) , "&
+"CONSTRAINT pk_ecs_"+as_campaignID+"_quest PRIMARY KEY(id_question) USING "&
+"INDEX "&
+"TABLESPACE ecs_ind) "&
+"TABLESPACE ecs end;"
zhyx21century 2002-06-20
  • 打赏
  • 举报
回复
gz
hammlet 2002-06-20
  • 打赏
  • 举报
回复
ls_SQL = "alter table carrying add is_ship char(1); " + &
ls_SQL = ls_SQL +
"INSERT INTO trade( code,mode) VALUES('4600','1');"

EXECUTE IMMEDIATE :ls_SQL USING SQLCA ;
leio 2002-06-20
  • 打赏
  • 举报
回复
用PL/SQL块的方式运行,在你的多条SQL语句前后加上BEGIN和END组成字符串后EXECUTE IMMEDIATE。
gztitan 2002-06-20
  • 打赏
  • 举报
回复
一脚先生:
在ORACLE 中如何分隔? 如何拼SQL?我用以下的例子但不行

ls_sql = "drop table ecs_"+as_campaignID+"_quest"

ls_sql = ls_sql+ ";"

ls_sql = ls_sql+ "CREATE TABLE ecs_"+as_campaignID+"_quest ( "&
+"id_question varCHAR2(6) NOT NULL, "&
+"type_question CHAR (1) NOT NULL, "&
+"con_question varchar2(2000) NOT NULL, "&
+"se_quest CHAR(1) , "&
+"CONSTRAINT pk_ecs_"+as_campaignID+"_quest PRIMARY KEY(id_question) USING "&
+"INDEX "&
+"TABLESPACE ecs_ind) "&
+"TABLESPACE ecs"


加载更多回复(2)

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧