[英]Create view using stored procedure Oracle
I have a list of people and I want to create view for each person.我有一个人员列表,我想为每个人创建视图。 If I Have 1 person, my view would be:如果我有 1 个人,我的观点是:
CREATE VIEW PersonInfo AS (
SELECT * FROM People WHERE id = 1000
);
But in fact, I have thousands of people, I want to create a stored procedure in Oracle to create view for each person, But View names are duplicated when I use it.但实际上我有几千人,我想在Oracle创建一个存储过程为每个人创建视图,但是我用的时候视图名称重复。 How can I handle that problem?我该如何处理这个问题? Thank you for helping in advance.感谢您提前提供帮助。
Your aim is interesting( presumably a related with training but not a real-world scenario ), but a dynamic solution would be handled with a for loop by using EXECUTE IMMEDIATE
of PL/SQL such as您的目标很有趣(大概与培训有关,但与真实场景无关),但是动态解决方案将通过使用 PL/SQL 的EXECUTE IMMEDIATE
来使用 for 循环处理,例如
SQL> CREATE OR REPLACE PROCEDURE Crt_People_Views AS
BEGIN
FOR p IN ( SELECT id FROM People )
LOOP
EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW PersonInfo_'||p.id
||' AS SELECT * FROM People WHERE id = '||p.id;
END LOOP;
END;
/
SQL> EXEC Crt_People_Views; -- call the proc. which will create the desired views
What problem are you trying to solve by creating a view for every person?你想通过为每个人创建一个视图来解决什么问题?
Would it make more sense to create a single view that takes a parameter (person_id)?创建一个带有参数 (person_id) 的单一视图是否更有意义?
Something like this?是这样的吗?
CREATE OR REPLACE VIEW VIEW_ABC (parm1 INTEGER) AS
SELECT *
FROM XYZ
WHERE ….
Call like this.
Then, all we need do is,
SELECT *
FROM VIEW_ABC (101)
/
No probs.没有问题。 with bind variables.与绑定变量。 Nicely integrated as one would expect.正如人们所期望的那样很好地集成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.