如何避免oracle中的无效标识符

Dof*_*o19 0 sql oracle plsql

我需要创建一个视图,但我得到此错误"无效的标识符".问题是我尝试访问一个不存在的colum名称,但我需要在我的视图中(如果列不存在,我需要将null).这是我的代码sql:

select .......
case 
when
   when exists (select 1  from user_tab_columns where table_name = 'Student' and COLUMN_NAME = 'email') then nvl(SUBSTR(student.email, 0, 100),'') else ''
end as STUDENT_EMAIL,
Run Code Online (Sandbox Code Playgroud)

这是扔" invalid identifier".我需要创建这个视图并创建字段"email",如果存在colum,我必须插入正确的,否则我放入字段值null;

MT0*_*MT0 5

使用动态SQL并尝试编译视图,如果有错误,则使用NULL:

Oracle安装程序:

CREATE TABLE students ( id, name )
AS SELECT 1, 'Alice' FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

创建视图:

DECLARE
  invalid_identifier EXCEPTION;
  PRAGMA EXCEPTION_INIT( invalid_identifier, -904);
BEGIN
  EXECUTE IMMEDIATE 'CREATE VIEW student_view AS SELECT id, name, SUBSTR( email, 1, 100 ) AS STUDENT_EMAIL FROM students';
EXCEPTION
  WHEN invalid_identifier THEN
    EXECUTE IMMEDIATE 'CREATE VIEW student_view AS SELECT id, name, CAST( null AS VARCHAR2(100) ) AS STUDENT_EMAIL FROM students';
END;
/
Run Code Online (Sandbox Code Playgroud)

结果:

SELECT * FROM student_view;
Run Code Online (Sandbox Code Playgroud)
ID | NAME  | STUDENT_EMAIL
-: | :---- | :------------
 1 | Alice | null         

db <> 在这里小提琴