如何在Sybase IQ中一次性修改所有存储过程的所有者
Sybase IQ 存储过程所有者修改方案
Sybase IQ中修改存储过程所有者不支持修改表用的普通ALTER语法,需使用系统自带存储过程sp_changeobjectowner操作,单对象修改和批量修改方法如下:
单个存储过程修改
- 语法模板:
sp_changeobjectowner '<原所有者>.<存储过程名称>', '<新所有者>' - 示例:将原所有者
old_dev下的存储过程proc_get_sales_data的所有者修改为new_prod
sp_changeobjectowner 'old_dev.proc_get_sales_data', 'new_prod';
批量修改100个存储过程方案
你可以通过查询系统表自动生成所有待修改存储过程的执行语句,无需手动逐个编写:
- 执行以下查询生成批量修改语句,注意替换语句中的
原所有者名和新所有者名为实际值:
SELECT 'sp_changeobjectowner ''' || user_name(creator) || '.' || proc_name || ''', ''新所有者名'';' FROM SYSPROCEDURE WHERE creator = user_id('原所有者名');
- 复制该查询返回的所有结果语句,批量执行即可完成全部存储过程的所有者修改。
注意事项
- 执行操作的账号需要拥有 DBA权限 或 ALTER ANY PROCEDURE 系统权限,否则会触发权限不足报错。
- 修改完成后可执行以下语句验证修改结果,核对返回的存储过程列表和所有者信息是否符合预期:
SELECT proc_name, user_name(creator) AS proc_owner FROM SYSPROCEDURE WHERE creator = user_id('新所有者名');
- 若你的存储过程内部代码中硬编码了原所有者前缀调用其他对象(例如
old_dev.proc_calc),修改所有者后需要同步调整存储过程内部的代码,避免执行时出现对象不存在的错误。
内容的提问来源于stack exchange,提问作者Aaradhya
相关产品推荐
相关产品推荐

