SnowConvert AI - Object References Report¶
备注
内置元素不视为本报告的一部分。
什么是“对象引用”?¶
对象引用术语用于指源代码中由代码单元引用的 DDL 定义。下表显示了每种支持的语言中可以引用哪些元素。
Object |
Teradata |
Oracle |
Transact-SQL |
Redshift |
BigQuery |
Spark |
Databricks |
Hive |
Vertica |
PostgreSQL |
Greenplum |
Netezza |
Azure Synapse |
IBM DB2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Table |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
View |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
Procedure |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
Function |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
Macro |
✓ |
|||||||||||||
Package Function |
✓ |
|||||||||||||
Package Procedure |
✓ |
|||||||||||||
*Package |
✓ |
|||||||||||||
Join Index |
✓ |
|||||||||||||
Index |
✓ |
|||||||||||||
Synonym |
✓ |
|||||||||||||
Database Link |
✓ |
|||||||||||||
Type |
✓ |
✓ |
✓ |
✓ |
||||||||||
Materialized View |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
|||
Trigger |
✓ |
✓ |
✓ |
✓ |
||||||||||
Sequence |
✓ |
✓ |
✓ |
✓ |
||||||||||
Constraint |
✓ |
✓ |
✓ |
备注
如果上面部分列出了星号(“*”),则表示该对象用于从自身调用不被视为 DDL 语句的属性,例如常量、变量或游标。
我在哪里可以找到它?¶
对象引用报告可以在名为 "reports" 的文件夹中找到,该文件夹位于转换的输出文件夹中。文件本身的名称以 "ObjectReferences" 开头,因此可以轻松找到。
文件的格式为 .CSV。
它包含什么信息?¶
对象引用报告包含有关转换时找到的所有引用的以下信息:
列 |
描述 |
|---|---|
PartitionKey |
转换的唯一标识符。 |
FileName |
对象所在文件的名称。 |
Caller_CodeUnit |
引用现有元素的代码单元的类型。 |
Caller_CodeUnit_Database |
引用现有元素的代码单元的数据库。目前,只有 SQL Server 对象可以拥有数据库。 |
Caller_CodeUnit_Schema |
引用现有元素的代码单元的架构。 |
Caller_CodeUnit_Name |
引用现有元素的代码单元的名称。 |
Caller_CodeUnit_FullName |
引用现有元素的对象的完全限定名称。 |
Referenced_Element_Type |
被引元素的 DDL 类型。 |
Referenced_Element_Database |
被引元素的数据库。目前,只有 SQL Server 对象可以拥有数据库。 |
Referenced_Element_Schema |
被引元素的架构。 |
Referenced_Element_Name |
被引元素的名称。 |
Referenced_Element_FullName |
被引元素的完全限定名称。 |
Line |
引用所在文件内的行号。 |
Relation_Type |
显示通过调用方代码单元和对象引用使用的关系的类型。 |
Oracle 数据库链接作为对象引用¶
要获取数据库链接引用的数据库名称、架构名称或对象名称等信息,我们需要知道数据库链接的定义方式。数据库链接包含其定义中使用的连接字符串中最相关的信息。例如
包含数据库名称的数据库链接¶
CREATE DATABASE LINK remote_hr_db
CONNECT TO hr_user
IDENTIFIED BY hr_password
USING 'RemoteDB';
SELECT * FROM hr.employees@remote_hr_db;
使用上面的示例,对象引用信息应如下所示:
| Caller_CodeUnit | Referenced_Element_Type | Referenced_Element_Database | Referenced_Element_Schema | Referenced_Element_Name | Referenced_Element_FullName | Line |
|---|---|---|---|---|---|---|
| SELECT | CREATE DATABASE LINK | RemoteDb | N/A | remote_hr_db | hr.employees@remote_hr_db | 6 |
包含数据库和架构名称的数据库链接¶
CREATE DATABASE LINK remote_hr_db1
CONNECT TO hr_user
IDENTIFIED BY hr_password
USING 'RemoteDB.MySchema';
SELECT * FROM employees@remote_hr_db1;
使用上面的示例,对象引用信息应如下所示:
| Caller_CodeUnit | Referenced_Element_Type | Referenced_Element_Database | Referenced_Element_Schema | Referenced_Element_Name | Referenced_Element_FullName | Line |
|---|---|---|---|---|---|---|
| SELECT | CREATE DATABASE LINK | RemoteDb | MySchema | remote_hr_db1 | hr.employees@remote_hr_db1 | 6 |
包含连接字符串的数据库链接¶
CREATE DATABASE LINK remote_hr_db2
CONNECT TO hr_user
IDENTIFIED BY hr_password
USING '(DESCRIPTION=(
ADDRESS=
(PROTOCOL=TCP)
(HOST=10.48.195.17)
(PORT=1521))
(CONNECT_DATA=(SID=MyDB)))';
SELECT * FROM employees@remote_hr_db2;
使用上面的示例,对象引用信息应如下所示:
| Caller_CodeUnit | Referenced_Element_Type | Referenced_Element_Database | Referenced_Element_Schema | Referenced_Element_Name | Referenced_Element_FullName | Line |
|---|---|---|---|---|---|---|
| SELECT | CREATE DATABASE LINK | MyDB | N/A | remote_hr_db2 | employees@remote_hr_db2 | 6 |
关系类型¶
The relation type represents how a caller code unit is related to an object reference. SnowConvert AI is able to identify the following kinds of relations:
FOREIGN KEY
INSERT
DELETE
UPDATE
CALL
EXECUTE
SYNONYM
ALTER
DROP
MERGE
TRUNCATE
LOCK
INDEX
TABLE COLUMN
GRANT
REVOKE
SELECT
COLUMN
FROM
WHERE
HAVING
GROUP BY
JOIN
ORDER BY
示例¶
通过 UPDATE 语句引用表的存储过程:
CREATE TABLE TABLE2
(
COL1 VARCHAR(50) NOT NULL,
COL2 INT NOT NULL
);
CREATE OR REPLACE PROCEDURE Procedure01 (param1 NUMBER)
IS
BEGIN
UPDATE TABLE2
SET COL1 = 'Anderson'
WHERE COL2 = param1;
END;
报告将显示类似下表的内容:
| Caller_CodeUnit | Referenced_Element_Type | Referenced_Element_FullName | Line | Relation_Type |
|---|---|---|---|---|
| CREATE PROCEDURE | CREATE TABLE | TABLE2 | 10 | UPDATE |
通过 FOREIGN KEY 引用另一个表的表:
CREATE TABLE TABLE1
(
COL1 INT
);
CREATE TABLE TABLE2
(
COL1 INT,
CONSTRAINT FK_COL1 FOREIGN KEY (COL1)
REFERENCES TABLE1(COL1)
);
报告将显示类似下表的内容:
| Caller_CodeUnit | Referenced_Element_Type | Referenced_Element_FullName | Line | Relation_Type |
|---|---|---|---|---|
| CREATE TABLE | CREATE TABLE | TABLE1 | 10 | FOREIGN KEY |
在 FROM 语句的 SELECT 子句中由视图引用的表:
CREATE TABLE TABLE1
(
COL1 INT
);
CREATE VIEW VIEW1
AS
SELECT * FROM TABLE1;
报告将显示类似下表的内容:
| Caller_CodeUnit | Referenced_Element_Type | Referenced_Element_FullName | Line | Relation_Type |
|---|---|---|---|---|
| CREATE VIEW | CREATE TABLE | TABLE1 | 8 | SELECT - FROM |
由视图作为结果集列引用的用户定义函数 (UDF)。
CREATE FUNCTION FUNCTION1(PARAM1 INT)
RETURN NUMBER
IS
BEGIN
RETURN(PARAM1 + 1);
END;
CREATE VIEW VIEW1
AS
SELECT FUNCTION1(*) FROM TABLE1;
报告将显示类似下表的内容:
| Caller_CodeUnit | Referenced_Element_Type | Referenced_Element_FullName | Line | Relation_Type |
|---|---|---|---|---|
| CREATE VIEW | CREATE FUNCTION | FUNCTION1 | 10 | SELECT - COLUMN |