use*_*682 1 oracle plsql exception dynamic-sql
我需要检查某个SELECT语句是否包含表中不存在的字段(列),例如:
从table1中选择col1,col2,col3
如果col1不存在,我想显示"缺少字段",而不是让用户获得无效的标识符错误.
这是我最好和最短的选择吗?
这个代码片段应该让你开始:
set serveroutput on
DECLARE
exc_invalid_id EXCEPTION;
PRAGMA EXCEPTION_INIT(exc_invalid_id, -904);
l_message VARCHAR2(4000);
BEGIN
EXECUTE IMMEDIATE '
SELECT col1
, col2
, col3
FROM table1
';
EXCEPTION
WHEN exc_invalid_id THEN
l_message := regexp_replace(sqlerrm, '^[A-Z]{3}-[0-9]{5}: "([^"]+)".*$', '\1');
dbms_output.put_line ( 'missing field '''||l_message||'''');
dbms_output.put_line ( 'exception: sqlcode='||SQLCODE||', sqlerrm='''||sqlerrm||'''');
WHEN OTHERS THEN
RAISE;
END;
/
show errors
Run Code Online (Sandbox Code Playgroud)
说明:
00904.| 归档时间: |
|
| 查看次数: |
2240 次 |
| 最近记录: |