我有一个脚本,其中包含一些用于创建表的SQL代码。这个脚本包含这样的内容:
CREATE TABLE Customer
(
CustomerID integer PRIMARY KEY,
FirstName varchar(32) NOT NULL,
LastName varchar(32) NOT NULL,
Street varchar(32),
Phone varchar(32)
)
CREATE TABLE Supplier
(
SupplierID varchar(8) PRIMARY KEY,
Name varchar(32) NOT NULL,
Street varchar(32),
Phone varchar(32)
)
我使用此代码运行此脚本:
try
{
var content = File.ReadAllText("c:\\users\\vahid\\desktop\\DBAssignment5\\A3\\SchemaSetUp.sql");
using (var command = new OracleCommand(content) { Connection = conn })
{
command.ExecuteNonQuery();
}
}
catch (Exception ex)
{
Console.WriteLine("Something's wrong\n");
Console.WriteLine(ex.ToString());
}
当脚本包含只创建一个表的代码时,它运行良好,但是当我添加代码来创建多个表时,我遇到了这个异常:
有人可以告诉我出了什么问题,我该怎么做才能解决这个问题?
谢谢
答案 0 :(得分:1)
如果脚本只包含CREATE TABLE,CREATE VIEW或GRANT命令,则可以使用CREATE SCHEMA命令:
CREATE SCHEMA AUTHORIZATION husqvik
CREATE TABLE Customer
(
CustomerID integer PRIMARY KEY,
FirstName varchar(32) NOT NULL,
LastName varchar(32) NOT NULL,
Street varchar(32),
Phone varchar(32)
)
CREATE TABLE Supplier
(
SupplierID varchar(8) PRIMARY KEY,
Name varchar(32) NOT NULL,
Street varchar(32),
Phone varchar(32)
);
这是单原子SQL命令的好处是所有表/视图/授权都是创建的或没有。有趣的是,SQL * Plus无法识别此语句并仅执行第二个CREATE TABLE
命令。
否则,您需要将脚本拆分为多个命令或作为匿名块执行:
BEGIN
EXECUTE IMMEDIATE
'CREATE TABLE Customer
(
CustomerID integer PRIMARY KEY,
FirstName varchar(32) NOT NULL,
LastName varchar(32) NOT NULL,
Street varchar(32),
Phone varchar(32)
)';
EXECUTE IMMEDIATE
'CREATE TABLE Supplier
( SupplierID varchar(8) PRIMARY KEY,
Name varchar(32) NOT NULL,
Street varchar(32),
Phone varchar(32)
)';
END;