前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >导入SQL Code

导入SQL Code

作者头像
用户7741497
发布于 2022-06-07 05:55:18
发布于 2022-06-07 05:55:18
1.4K00
代码可运行
举报
文章被收录于专栏:hml_知识记录hml_知识记录
运行总次数:0
代码可运行

导入SQL Code

本章介绍如何将SQL代码从文本文件导入Intersystems SQL。导入SQL代码时,IntersystemsIris®数据平台使用动态SQL准备并执行每行SQL。如果遇到无法解析的代码行,则SQL导入跳过该行代码并继续准备和执行后续行,直到它到达文件的末尾。所有SQL代码导入操作导入到当前名称空间。

SQL导入主要用于导入数据定义语言(DDL)命令(例如Create Table),并使用InsertUpdateDelete命令填充表。 SQL导入确实准备并执行SELECT查询,但不创建结果集。

SQL导入可用于导入Intersystems SQL代码。它也可以用于代码迁移,从其他供应商导入SQL代码(FDBMSInformixInterbaseMSSQLServerMySQLOracleSybase)。来自其他供应商的代码被转换为Intersystems SQL代码并执行。 SQL导入无法将所有SQL命令导入Intersystems SQL。它导入与SQL标准的Intersystems Iris实现兼容的那些命令和条款。不兼容的功能通常被解析,但忽略了。

SQL导入可以成功准备一个SQL查询 - 在适当的情况下创建相应的缓存查询 - 但它不会执行查询。

通过从%system.sql.schema类中调用相应的方法,执行SQL代码导入。导入SQL代码时,这些方法可以创建其他两个文件:errors.log文件,它记录解析SQL命令中的错误,以及一个不支持的。其中包含该方法无法识别为SQL命令的文字文本。

导入Intersystems SQL.

可以使用以下%System.sql.schema方法从文本文件中导入Intersystems SQL代码:

  • ImportDDL()是一个通用的SQL导入方法。此方法运行作为背景(非交互式)进程。要导入Intersystems SQL,请将“IRIS”指定为第一个参数。
  • run()是一个Intersystems SQL导入方法。该方法从终端交互方式运行。它会提示指定导入文本文件的位置,创建Errors.log文件和Unsupported.log文件以及其他信息。

注意:此导入和执行SQL DDL代码不应与管理门户SQL接口的Import语句操作混淆。该操作以XML格式导入SQL语句。

以下示例导入Intersystems Iris SQL代码文件Pathname MySQLCode.txt,在当前命名空间中执行该文件中列出的SQL命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DO $SYSTEM.SQL.Schema.ImportDDL("IRIS",$USERNAME,"c:\temp\mysqlcode.txt",,1)

默认情况下,ImportDDL()创建错误日志文件。此示例在与SQL代码文件中创建名为mysqlcode_errors.log的文件。第五个参数是一个布尔值,指定是否创建列出不受支持的SQL命令的文件。默认值为0.在此示例中,第五个参数设置为1,在与SQL代码文件相同的目录中创建名为mysqlcode_unsupported.log的文件。即使没有写入它们时,也会创建这些日志文件。

从终端执行ImportDDL()时,它首先列出输入文件,错误日志文件和不受支持的日志文件。然后,对于每个SQL命令,它显示一个列表,例如以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL statement to process (number 1):
     CREATE TABLE Sample.MyStudents (StudentName VARCHAR(32),
     StudentDOB DATE)
      Preparing SQL statement...
      Executing SQL statement...
  DONE

如果在任何SQL命令中发生错误,则终端显示错误,如以下示例所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL statement to process (number 3):
       INSERT INTO Sample.MyStudents (StudentName,StudentDOB) SELECT Name,
       DOB FROM Sample.Person WHERE Age <= '21'
    Preparing SQL statement...
ERROR #5540: SQLCODE: -30 Message:  Table 'SAMPLE.PERSON' not found
       Pausing 5 seconds - read error message!  (Type Q to Quit)

如果在5秒内没有退出,则导入DDL()继续执行下一个SQL命令。错误记录在错误日志文件中,具有时间戳,用户名和命名空间名称。

导入文件格式

SQL文本文件必须是未格式化的文件,例如.txt文件。每个SQL命令必须在自己的行中开始。 SQL命令可能会被丢进到多行,允许缩进。默认情况下,每个SQL命令必须在其自己的行上进行Go语句。

以下是有效的Intersystems SQL Import文件文本的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  CREATE TABLE Sample.MyStudents (StudentName VARCHAR(32),StudentDOB DATE)
GO
  CREATE INDEX NameIdx ON TABLE Sample.MyStudents (StudentName)
GO
  INSERT INTO Sample.MyStudents (StudentName,StudentDOB) SELECT Name,
  DOB FROM Sample.Person WHERE Age <= '21'
GO
  INSERT INTO Sample.MyStudents (StudentName,StudentDOB) 
          VALUES ('Jones,Mary',60123)
GO
  UPDATE Sample.MyStudents SET StudentName='Smith-Jones,Mary' WHERE StudentName='Jones,Mary'
GO
  DELETE FROM Sample.MyStudents WHERE StudentName %STARTSWITH 'A'
GO
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DHC-APP>DO $SYSTEM.SQL.DDLImport("CACHE","glenn","e:\temp\yxtest.txt",,1)
 
 
Importing SQL Statements from file: e:\temp\yxtest.txt
 
 
Recording any errors to principal device and log file: e:\temp\yxtest_Errors.log
 
 
Recording unsupported statements to file: e:\temp\yxtest_Unsupported.log
 
 
  SQL statement to process (number 1):
     CREATE TABLE Sample.MyStudents (StudentName VARCHAR(32),
     StudentDOB DATE)
      Preparing SQL statement...
      Executing SQL statement...
  DONE
 
  SQL statement to process (number 2):
       INSERT INTO Sample.MyStudents (StudentName,StudentDOB) SELECT Name,
       DOB FROM Sample.Person WHERE Age <= '21'
      Preparing SQL statement...
      Executing SQL statement...
  DONE
 
  SQL statement to process (number 3):
     INSERT INTO Sample.MyStudents (StudentName,StudentDOB)
               VALUES ('Jones,Mary',60123)
      Preparing SQL statement...
      Executing SQL statement...
  DONE
 
  SQL statement to process (number 4):
     INSERT OR UPDATE INTO Sample.MyStudents (StudentName,StudentDOB) VALUES ('
     Smith-Jones,Mary',60123)
      Preparing SQL statement...
      Executing SQL statement...
  DONE
 
  SQL statement to process (number 5):
     DELETE FROM Sample.MyStudents WHERE StudentName %STARTSWITH 'A'
      Preparing SQL statement...
      Executing SQL statement...
  DONE
 
  SQL statement to process (number 6):
     SELECT TOP 5 * FROM Sample.MyStudents
      Preparing SQL statement...
      Executing SQL statement...
  DONE
 
Elapsed time: 5.750462 seconds

通过设置ImportDDL(“IRIS”)DEOS第七参数,此方法可以接受(但不需要)指定的语句末尾分隔符,通常是分号(;),在每个SQL命令的末尾。默认值不支持终止终止分隔符。始终支持SQL命令后行的“Go”语句,但如果deos指定语句结束分隔符,则不需要。

支持的SQL命令

并非所有有效的Intersystems都可以导入SQL命令。以下是支持的Intersystems SQL命令列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE, ALTER TABLE, DROP TABLE

CREATE VIEW, ALTER VIEW, DROP VIEW

CREATE INDEX all index types, except bitslice

CREATE USER, DROP USER

CREATE ROLE

GRANT, REVOKE

INSERT, UPDATE, INSERT OR UPDATE, DELETE

SET OPTION

SELECT for optimizer plan mode only

代码迁移:导入非Intersystems SQL

可以导入以其他供应商使用的SQL格式的SQL代码。来自其他供应商的代码被转换为Intersystems SQL代码并执行。提供以下方法:

  • ImportDDL()是一个通用的SQL导入方法。此方法运行作为背景(非交互式)进程。

要以特定格式导入SQL,将该格式的名称指定为第一个参数:FDBMS,Informix,Interbase,MSSQLSERVER(或MSSQL),MySQL,Oracle或Sybase

以下示例导入SQL代码文件SQLCode.txt,在当前命名空间中执行该文件中列出的SQL命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  DO $SYSTEM.SQL.Schema.ImportDDL("MSSQL",$USERNAME,$lb("C:\temp\somesql.sql","UTF8"),,1)

请注意,如果第一个参数是MSSQLSybaseInformixMySQL,则第三个参数可以是SQL代码文件路径名或具有第一个元素的两个元素%list,SQL代码文件路径名和第二个元素是i / o用于使用的翻译表。

  • %system.sql.schema中提供单个交互式方法,用于导入以下类型的SQL:loadfdbms()loadInformix()loadInterbase()loadmssqlserver()loadoracle()loadybase()。这些方法与终端交互式运行。它会提示指定导入文本文件的位置,创建Errors.log文件和Unsupported.log文件以及其他信息。
  • ImportDDLDIR()允许从目录中的多个文件导入SQL代码。此方法运行作为背景(非交互式)进程。它支持InformixMSSQLServerSybase。要导入的所有文件必须具有.sql扩展后缀。
  • ImportDir()允许从目录中的多个文件导入SQL代码。提供比ImportDDIR()更多的选项。此方法运行作为背景(非交互式)进程。它支持MSSQLServerSybase。可以指定允许文件扩展后缀的列表。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用SQL Shell界面(三)
对于每个结果集项目,此命令列出以下元数据:列名称(SQL字段名称),键入(ODBC数据类型整数代码),PRE(精度或最大长度),比例(最大分数数字),NULL(BOOLEAN:1 = NULL允许,0 =不允许空值),标签(标题标签,请参阅列别名),表(SQL表名称),架构(架构名称),CTYPE(客户端数据类型,请参阅%SQL.statementColumn ClientType属性)。
用户7741497
2022/06/07
9380
SQL定义表(三)
调用此方法时,它将尝试创建Sample.Employee表(以及相应的Sample.Employee类)。如果成功,则将SQLCODE变量设置为0。如果失败,则SQLCODE包含指示错误原因的SQL错误代码。
用户7741497
2022/06/06
1.4K0
使用动态SQL(一)
动态SQL是指在运行时准备并执行的SQL语句。在动态SQL中,准备和执行SQL命令是单独的操作。通过动态SQL,可以以类似于ODBC或JDBC应用程序的方式在InterSystems IRIS中进行编程(除了要在与数据库引擎相同的进程上下文中执行SQL语句)。动态SQL是从ObjectScript程序调用的。
用户7741497
2022/06/06
2K0
SQL命令 TRUNCATE TABLE
TRUNCATE TABLE命令从表中删除所有行,并重置所有表计数器。 可以直接截断表,也可以通过视图截断表。 通过视图截断表会受到删除要求和限制,如CREATE view中所述。
用户7741497
2022/05/07
1.9K0
SQL定义和使用视图
视图是一种虚拟表,由执行时通过SELECT语句或几个SELECT语句的UNION从一个或多个物理表中检索到的数据组成。 SELECT可以通过指定表或其他视图的任意组合来访问数据。因此,存储了视图的视图提供了物理表的所有灵活性和安全性特权。
用户7741497
2022/06/06
2K0
SQL命令 UPDATE(四)
本节中的示例更新SQLUser.MyStudents表。 下面的示例创建SQLUser.MyStudents表,并用数据填充它。 因为这个示例的重复执行会积累具有重复数据的记录,所以它使用TRUNCATE TABLE在调用INSERT之前删除旧数据。 在调用UPDATE示例之前执行这个示例:
用户7741497
2022/05/07
6130
SQL查询数据库(二)
InterSystems SQL允许您在SQL查询中调用类方法。这为扩展SQL语法提供了强大的机制。
用户7741497
2022/06/06
2.5K0
使用动态SQL(二)
准备一条SQL语句将验证该语句,为后续执行做准备,并生成有关该SQL语句的元数据。
用户7741497
2022/06/07
7110
使用SQL Shell界面(二)
SQL Shell自动将在终端会话期间发出的每个成功的SQL语句存储在本地缓存中,并为其分配一个顺序号。这些数字用于在当前Terminal过程中重新调用以前的SQL语句。 SQL Shell仅将数字分配给成功的SQL语句。如果在准备SQL语句期间发生错误,则不会分配任何编号。这些数字分配不是特定于名称空间的。以下是可用的数字调用命令:
用户7741497
2022/06/07
1.8K0
SQL查询数据库(一)
SELECT语句从一个或多个表或视图中选择一行或多行数据。下面的示例显示了一个简单的SELECT:
用户7741497
2022/06/06
2.6K0
使用嵌入式SQL(一)
可以将SQL语句嵌入InterSystemsIRIS®数据平台使用的ObjectScript代码中。这些嵌入式SQL语句在运行时转换为优化的可执行代码。
用户7741497
2022/06/06
1.3K0
优化查询性能(三)
可以使用解释或显示计划工具来显示SELECT、DECLARE、UPDATE、DELETE、TRUNCATE TABLE和一些INSERT操作的执行计划。这些操作统称为查询操作,因为它们使用SELECT查询作为其执行的一部分。InterSystems IRIS在准备查询操作时生成执行计划;不必实际执行查询来生成执行计划。
用户7741497
2022/06/08
1.3K0
SQL命令 CREATE TABLE(六)
可选的WITH子句可以在表格元素逗号结尾的圆括号之后和Shard Key定义(如果存在的话)之后指定。 WITH子句可以包含一个用逗号分隔的列表:
用户7741497
2022/04/15
4370
使用SQL Shell界面(一)
可以使用$SYSTEM.SQL.Execute() 方法从Terminal命令行执行一行SQL代码,而无需调用SQL Shell。以下示例显示如何在终端提示下使用此方法:
用户7741497
2022/06/07
1.1K0
SQL排序(二)
InterSystems SQL提供了排序规则功能,可用于更改字段的排序规则或显示。
用户7741497
2022/06/06
1.8K0
解释SQL查询计划(二)
“SQL语句详细信息”提供冻结或解冻查询计划的按钮。 它还提供了一个Clear SQL Statistics按钮来清除性能统计,一个Export按钮来将一个或多个SQL语句导出到一个文件,以及一个Refresh和Close页面按钮。
用户7741497
2022/06/08
1.9K0
SQL定义表(一)
可以通过定义表(使用CREATE TABLE)或通过定义投影到表的持久类来创建表:
用户7741497
2022/06/06
1.5K0
SQL语言元素(二)
SQL-92标准在操作符优先级方面不精确; 关于这个问题的假设在不同的SQL实现中有所不同。 InterSystems SQL可以配置为支持任意一种优先级:
用户7741497
2022/06/06
9310
使用动态SQL(七)
SELECT或CALL语句返回所有这些元数据。 INSERT,UPDATE或DELETE返回语句类型元数据和形式参数。
用户7741497
2022/06/07
9180
使用动态SQL(四)
使用%Execute()或%ExecDirect()执行语句将返回一个实现%SQL.StatementResult接口的对象。该对象可以是单一值,结果集或从CALL语句返回的上下文对象。
用户7741497
2022/06/07
5480
相关推荐
使用SQL Shell界面(三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档