如何根据现存表创建新表(用PB程序控制)

Bald_eagle 2000-07-27 11:05:00
我的客户端采用PB6.5和OPEN CLIENT,服务器端是ADAPTIVE SERVER 11.5。我想通过PB编程实现根据现存表创建新表。服务器的的数据库名称是'cybigdb'。我在服务器的sql
advantage中运行'select * into newtablename from oldtablename'可以根据
oldtablename表创建新表newtablename。在PB的DATABASE ADMINISTRATOR中运行该语句则提示select error:There is an already an object named 'newtablename' in the database。但确实创建了新表newtablename。我在PB的代码中使用
Execute immediate :ls_sql执行该语句,结果不能不能创建新表,并返回sqlerrtext:
'CREATE TABLE'command is not allowed within a multi_statement transaction
in the 'cybigdb' database。
我想知道原因。或者有其它的实现方法也可以。
...全文
176 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nhlr 2001-07-23
  • 打赏
  • 举报
回复
请问newtablename是不是不可以为数字?如"123456"
ssrrll 2000-08-10
  • 打赏
  • 举报
回复
可从系统表sysobjects中得到该表的ID,然后根据ID从syscolumns中得到该表的字段,根据syscolumns中usertype的值从systypes中得到该字段的类型,然后组合成一创建该表的SQL的字符变量,然后execute immediate即可。
Bald_eagle 2000-07-30
  • 打赏
  • 举报
回复
事先把autocommit设为true也没用。而且每次执行该操作前,我都已把新生成的表删除了。
insert into是把数据插入到现存表中,而我是想根据已有的表结构创建一个新表。
playyuer 2000-07-28
  • 打赏
  • 举报
回复
select * into newtablename from oldtablename
是将已有表的结构与数据统统复制成新表,第一次执行应当无问题。
以后再执行应先执行 DROP TABLE newtablename

或者直接执行:
INSERT INTO newtablename
SELECT newtablename FROM oldtablename



wolcy 2000-07-28
  • 打赏
  • 举报
回复
是不是要下列语句后再execute immediate:
sqlca.autocommit=true

1,072

社区成员

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

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