返回首页

gbase数据、南大通用产品文档:GBase8acallproc

更新日期:2024年09月11日

执行存储过程。可执行带out 参数的存储过程。
样例代码:
code 1(不带OUT 参数)
DELIMITER |
CREATE PROCEDURE `test`.`test_proc`(in id int, in name varchar(50))
BEGIN

select id,name;
END |
from GBaseConnector import connect
config = {'host' : '172.16.3.10',
'port' : 5258,
'user' : 'gbase',
'password' : 'gbase20110531',
'database' : 'test'}
conn = connect(**config)
cur = conn.cursor()
res = cur.callproc("test_proc", (1,'test'))
for rs in res:
print rs.fetchall()
函数名称
返回值
返回值类

函数参数
参数含义
callproc
游标类
型迭代

iterator
1.procname(string
)
2.params(tuple)
1.存储过程名
2.存储过程参数
列表



GBase Python 接口开发手册
南大通用数据技术股份有限公司

- 31 -
conn.close()

code 2(带OUT 参数)
CREATE PROCEDURE `test`.`test_proc`(OUT param_name int)
BEGIN

set param_name = 100;
END |
from GBaseConnector import connect
config = {'host' : '172.16.3.10',
'port' : 5258,
'user' : 'gbase',
'password' : 'gbase20110531',
'database' : 'test'}
conn = connect(**config)
cur = conn.cursor()
for rs in cur.callproc('test_proc', ('',)):
pass
print cur.save_param_val()
conn.close()

错误号 -746 允许您提供错误消息的正文。就像前面的示例,如果 new_qty 大于 1.50 倍
的 old_qty,以下示例也将生成错误。但是,在本例中,错误号为 -746,并且消息正文 Too
many items for Mfr. 的项过多是作为 RAISE EXCEPTION 语句中的第三个参数提供的。有
关此语句的语法和使用的更多信息,请参阅创建和使用 SPL 例程 中的 RAISE
EXCEPTION 语句。
CREATE PROCEDURE upd_items_p2()
DEFINE GLOBAL old_qty INT DEFAULT 0;
DEFINE new_qty INT;
LET new_qty = (SELECT SUM(quantity) FROM items);
IF new_qty > old_qty * 1.50 THEN
RAISE EXCEPTION -746, 0, 'Too many items for Mfr.';
END IF
END PROCEDURE;
如果使用 DB-Access 提交触发语句,并且如果 new_qty 大于 old_qty,那么您将得到下图显
示的结果。
图: 带有用户指定消息正文的错误号 -746
Press CTRL-W for Help
SQL: New Run Modify Use-editor Output Choose Save Info Drop
Exit
Modify the current SQL statements using the SQL editor.

-------------------- store7@myserver --------- Press CTRL-W for Help -----

INSERT INTO items VALUES( 2, 1001, 2, 'HRO', 1, 126.00);





GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 353 -






746: Too many items for Mfr.
如果在 SQL API 中通过 SQL 语句调用触发器,
那么数据库服务器将 sqlcode 设置为 -746,
并在 SQL 通信区域
(SQL;CA)
的sqlerrm 字段中返回消息正文。
有关如何使用 SQL;CA 的
更多信息,请参阅您的 SQL API 出版物。

当已结束处理 SQL 语句的结果时,通过在 Java™ 程序中调用恰当的 close() 方法,来关
闭 Statement、PreparedStatement 和CallableStatement 对象。此关闭立即释放已分配来执行
SQL 语句的那些资源。虽然 ResultSet.close() 方法关闭 ResultSet 对象,但它不释放分配
给 Statement、PreparedStatement 或 CallableStatement 对象的资源。
当已结束处理 SQL 语句的结果时,
调用 ResultSet.close() 和 Statement.close() 方法,
来指示
您以该语句或结果集处理的 GBase 8s JDBC Driver,这是一种好的做法。当您这么做时,程
序释放数据库服务器上的所有资源。然而,不需要特意地调
用 ResultSet.close() 和 Statement.close(),
只要调用负责释放这些资源的 Connection.close() 即
可。