TAdoQuery执行oracle创建表脚本问题

zzn007 2009-05-21 01:57:06
原来数据库表都在sql2000上,使用adoquery经过处理的脚本执行通过。现在项目要求转移到oracle上,以前没接触过。经过几天的摸索,终于将数据库表的结构脚本搞出来了,是在sql developer上通过的。现在要在tadoquery中执行,结果就不行了,搞不定,脚本里有创建表结构的,还有创建索引、主键、外键的,还有序列和触发器。。。脚本如下(部分)。还有一个棘手的问题:原来sql中表数据是不区分大小写的,如设置了主键,就只能插入‘A’,‘a’插入就会报错!但是oracle却都能插入,请问如何设置表可以实现插入大小写不敏感的数据?


脚本如下:驱动用的是OraOLEDB.Oracle,
CREATE TABLE UA_ADMIN (
USERID VARCHAR (100) NOT NULL ,
PASSWORD VARCHAR (100) NOT NULL
)
;
/

CREATE TABLE UA_AUTHLOG (
ID NUMBER(19,0) NOT NULL ,
USERID VARCHAR (100) NOT NULL ,
FUNCID VARCHAR (100) NOT NULL ,
MSG VARCHAR (500) NULL ,
LOGTIME VARCHAR (20) NOT NULL
)
;
/

CREATE TABLE UA_BACKUPSERVER (
IP VARCHAR (20) NOT NULL ,
PORT VARCHAR (10) NOT NULL ,
STATUS VARCHAR (5) NOT NULL ,
ISVALID INT NOT NULL
)
;
/

DECLARE
V_SQL VARCHAR2(2000);
BEGIN
V_SQL:=' CREATE OR REPLACE TRIGGER TRG_UA_BACKUPSERVER
BEFORE INSERT OR UPDATE ON UA_BACKUPSERVER
FOR EACH ROW
BEGIN
:NEW.IP := LOWER(:NEW.IP) ;
:NEW.PORT := LOWER(:NEW.PORT) ;
END;';
EXECUTE IMMEDIATE V_SQL;
END;
/

CREATE TABLE UA_CHIEFSERVER (
GUID VARCHAR (100) NULL ,
IP VARCHAR (20) NULL ,
PORT VARCHAR (10) NULL ,
LOADBALANCE VARCHAR (5) NULL ,
DBHOST VARCHAR (100) NULL ,
DBNAME VARCHAR (100) NULL ,
DBUSERNAME VARCHAR (100) NULL ,
DBPASSWORD VARCHAR (100) NULL ,
VERSION VARCHAR (1000) NULL ,
ISVALID INT NOT NULL
)
;
/

CREATE TABLE UA_CLIENT (
IP VARCHAR (20) NOT NULL ,
PORT VARCHAR (10) NOT NULL ,
GROUPID VARCHAR (100) NOT NULL
)
;
/

DECLARE
V_SQL VARCHAR2(2000);
BEGIN
V_SQL:=' CREATE OR REPLACE TRIGGER TRG_UA_CLIENT
BEFORE INSERT OR UPDATE ON UA_CLIENT
FOR EACH ROW
BEGIN
:NEW.IP := LOWER(:NEW.IP) ;
END;';
EXECUTE IMMEDIATE V_SQL;
END;
/
...全文
132 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
starluck 2009-05-22
  • 打赏
  • 举报
回复
只有循环执行了,一次估计建不起来。
killu 2009-05-22
  • 打赏
  • 举报
回复
'A',‘a'的问题,可能有个很愚蠢的解决办法,就是用INSERT UPDATE触发器自动改成大写或小写,不过不建议采用
killu 2009-05-22
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE TEST AS
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE XXX1(ID1 VARCHAR2(10))';EXECUTE IMMEDIATE 'CREATE TABLE XXX2(ID1 VARCHAR2(10))';
END;
zzn007 2009-05-22
  • 打赏
  • 举报
回复
请问楼上如何修改?不要说一半啊!
killu 2009-05-21
  • 打赏
  • 举报
回复
还有个办法是用存储过程,不过建表SQL要改
killu 2009-05-21
  • 打赏
  • 举报
回复
这样的,恐怕只有运行SQLPLUS来执行了
zzn007 2009-05-21
  • 打赏
  • 举报
回复
楼上的方法早已试过,结果一样的
sparklerl 2009-05-21
  • 打赏
  • 举报
回复
ADOConnect来执行sql语句试试
willflyz 2009-05-21
  • 打赏
  • 举报
回复
试了一下看来是没有办法,“;”、“/”这两个在ADOQuery中执行都会报错,这两个符号可能只能在PL/SQL D或者Toad当中使用吧
zzn007 2009-05-21
  • 打赏
  • 举报
回复
单个表是可以的,现在就是都放在一起,就不行。我把“;”、“/”都去掉了,还是去掉
kampan 2009-05-21
  • 打赏
  • 举报
回复
AdoQuery.Close;
AdoQuery.SQL.Clear;
AdoQuery.SQL.Text := 'CREATE TABLE UA_ADMIN ( USERID VARCHAR (100) NOT NULL , PASSWORD VARCHAR (100) NOT NULL )';
AdoQuery.ExecSQL;
AdoQuery.Close;
willflyz 2009-05-21
  • 打赏
  • 举报
回复
单个表有没有试过行不行,把所有'/'去掉试试看,另外你那些TRIGGER直接建立就行了,没必要用动态SQL去建.
zzn007 2009-05-21
  • 打赏
  • 举报
回复
主要的问题是,adoquery如何执行创建表的基本啊???这是紧急的问题
willflyz 2009-05-21
  • 打赏
  • 举报
回复
但是oracle却都能插入,请问如何设置表可以实现插入大小写不敏感的数据?
--
这个似乎无解,即使建表的时候加双引号区分大小写一样可以插入'a','A',加双引号的作用似乎只对查询有用.
lishan200012 2009-05-21
  • 打赏
  • 举报
回复
学习.
kampan 2009-05-21
  • 打赏
  • 举报
回复
Oracle大小写好像用有无双引号来控制吧,不过好像也只限于表名和字段名。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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