LightDB create view支持force关键字

在Oracle中,create view时指定FORCE关键字表示强制创建视图。正常情况下,如果基表不存在则创建视图就会失败。但是可以使用force选项强制创建视图(前提:创建视图的语句没有语法错误),此时该视图处于失效状态。举例如下:

SQL> select * from invalid_table;
select * from invalid_table
*
ERROR at line 1:
ORA-00942: table or view does not exist


SQL>
SQL> create or replace view test_view as select * from invalid_table;
create or replace view test_view as select * from invalid_table
*
ERROR at line 1:
ORA-00942: table or view does not exist


SQL>
SQL> create or replace force view test_force_view as select * from invalid_table;

Warning: View created with compilation errors.

SQL>
SQL> select * from test_force_view;
select * from test_force_view
*
ERROR at line 1:
ORA-04063: view "SYS.TEST_FORCE_VIEW" has errors

在LightDB中,在Oracle兼容模式下,create view支持指定FORCE关键字语法糖,实际功能不生效,即实际功能效果与create view不指定FORCE关键字相同。

create database viewtestdb with LIGHTDB_SYNTAX_COMPATIBLE_TYPE = oracle;
NOTICE: auto create user "viewtestdb" success
\c viewtestdb
CREATE TABLE view_test_table
(
id integer primary key,
co1 text,
co2 NUMBER,
co3 bigint
);
INSERT INTO view_test_table VALUES(1, 'hello world', 10, 100);
INSERT INTO view_test_table VALUES(2, 'hello world', 20, 200);
INSERT INTO view_test_table VALUES(3, 'hello world', 30, 300);
CREATE FORCE VIEW force_view as SELECT 1 as ltapk, 2 as ltaut;
select * from force_view;
ltapk | ltaut
-------+-------
1 | 2
(1 row)

CREATE OR REPLACE FORCE VIEW force_view as SELECT 3 as ltapk, 4 as ltaut;
select * from force_view;
ltapk | ltaut
-------+-------
3 | 4
(1 row)

CREATE OR REPLACE FORCE VIEW force_view2 as SELECT * FROM view_test_table;
select * from force_view2;
id | co1 | co2 | co3
----+-------------+-----+-----
1 | hello world | 10 | 100
2 | hello world | 20 | 200
3 | hello world | 30 | 300
(3 rows)

CREATE OR REPLACE FORCE VIEW force_view2 as SELECT * FROM view_test_table WHERE id = 2;
select * from force_view2;
id | co1 | co2 | co3
----+-------------+-----+-----
2 | hello world | 20 | 200
(1 row)

CREATE OR REPLACE FORCE VIEW force_view2 as SELECT * FROM view_test_table WHERE id >= 2;
select * from force_view2;
id | co1 | co2 | co3
----+-------------+-----+-----
2 | hello world | 20 | 200
3 | hello world | 30 | 300
(2 rows)

select * from invalid_table;
ERROR: relation "invalid_table" does not exist
LINE 1: select * from invalid_table;
                                  ^

create force view t1 as select * from invalid_table;
ERROR: relation "invalid_table" does not exist
LINE 1: create force view t1 as select * from invalid_table;
                                                                       ^

posted @ 2023-05-13 10:00  小小罗的背影  阅读(59)  评论(1编辑  收藏  举报