如果在非数据操纵语言(DML)语句(即 EXECUTE FUNCTION 或 EXECUTE PROCEDURE)的 SQL 语句中调用 SPL 例程,那么 SPL
例程可以执行未列在
SQL 语句在 SPL 语句块中有效一节中的任何语句。
如果 SPL 例程作为 DML 语句(即 INSERT 、UPDATE 、DELETE 、MERGE 或 SELECT 语句)的一部分调用,那么例程不能执行下面列表中的任何
SQL 语句:
- ALTER ACCESS_METHOD
- ALTER FRAGMENT
- ALTER INDEX
- ALTER SEQUENCE
- ALTER TABLE
- BEGIN WORK
- COMMIT WORK
- CREATE ACCESS_METHOD
- CREATE AGGREGATE
- CREATE DISTINCT TYPE
- CREATE OPAQUE TYPE
- CREATE OPCLASS
- CREATE ROLE
- CREATE ROW TYPE
- CREATE SEQUENCE
- CREATE TRIGGER
- DELETE
- DROP ACCESS_METHOD
- DROP AGGREGATE
- DROP INDEX
- DROP OPCLASS
- DROP ROLE
- DROP ROW TYPE
- DROP SEQUENCE
- DROP SYNONYM
- DROP TABLE
- DROP TRIGGER
- DROP TYPE
- DROP VIEW
- INSERT
- MERGE
- RENAME COLUMN
- RENAME DATABASE
- RENAME SEQUENCE
- RENAME TABLE
- ROLLBACK WORK
- SET CONSTRAINTS
- TRUNCATE
- UPDATE
如果 SPL 例程的调用上下文是试图执行以上列出的任何 SQL 语句的 DML 语句,则
GBase 8s 发出错误 -675。
这些限制不适用于触发器调用的 SPL 例程,因为在这些情况下 SPL 例程不是由 DML 语句调用,因而可以包含任意未列在 SQL 语句在 SPL 语句块中有效中的 SQL 语句,例如 UPDATE 、INSERT 和 DELETE。