准备并执行用户定义的例程
准备用户定义的例程(UDR)的方式依赖于该 UDR 是用户定义的过程还是用户定义的函数:
要准备用户定义的过程,请准备执行该过程的 EXECUTE PROCEDURE 语句。
要执行用户准备的过程,请使用 EXECUTE 语句。
要准备用户定义的函数,请准备执行该函数的 EXECUTE FUNCTION(或 EXECUTE
PROCEDURE)语句。
您不可在 PREPARE 语句中包括 EXECUTE FUNCTION(或 EXECUTE PROCEDURE)的 INTO
子句。
如何执行准备好的用户定义的函数,依赖于它是仅返回一组值还是多组值。对于仅返回一组值的用
户定义的函数,请使用 EXECUTE 语句。
要执行返回多于一组返回值的用户定义的函数,您必须将该 EXECUTE FUNCTION(或
EXECUTE PROCEDURE)语句与一游标相关联。
在单一语句准备中受限的语句
通常,您可准备任何数据操作语言(DML)语句。
在 GBase 8s 中,您可准备任何单一的 SQL 语句,除下列语句之外:
ALLOCATE COLLECTION
ALLOCATE DESCRIPTOR
ALLOCATE ROW
CLOSE
CONNECT
CREATE FUNCTION FROM
CREATE PROCEDURE FROM
CREATE ROUTINE FROM
DEALLOCATE COLLECTION
DEALLOCATE DESCRIPTOR
DEALLOCATE ROW
DECLARE
DESCRIBE
DISCONNECT
EXECUTE
EXECUTE IMMEDIATE
FETCH
FLUSH
FREE
GET DESCRIPTOR
GET DIAGNOSTICS
INFO
LOAD
OPEN
OUTPUT
PREPARE
PUT
SET AUTOFREE
SET CONNECTION
SET DEFERRED_PREPARE
SET DESCRIPTOR
UNLOAD
WHENEVER
您可准备 SELECT 语句。如果 SELECT 包括 INTO TEMP 子句,则 ESQL/C 程序可执行随同
EXECUTE 语句的准备好的语句。如果它不包括 INTO TEMP 子句,则该语句返回数据行。请使
用 DECLARE、OPEN 和 FETCH 游标语句来存取行。
在 ESQL/C 中,准备好的 SELECT 语句可包括 FOR 子句。随同 DECLARE 语句使用此子句来创建一
更新游标。下一示例展示在 GBase 8s ESQL/C 中带有 FOR UPDATE 子句的 SELECT 语句:
sprintf(up_query, “%s %s %s”,
"select * from customer ",
"where customer_num between ? and ? ",
“for update”);
EXEC SQL prepare up_sel from :up_query;
EXEC SQL declare up_curs cursor for up_sel;
EXEC SQL open up_curs using :low_cust,:high_cust;