我需要创建一个存储过程,我必须从select语句创建一个表,我必须在其中插入参数。 这是我的疑问:
CREATE TABLE DBL_JW AS
SELECT * FROM (
SELECT m.IDM,
m2.IDM AS dups_key
FROM members_tbl m
LEFT OUTER JOIN members_tbl m2
ON ( m.IDM != m2.IDM
AND m.DBIRTH = m2.DBIRTH
AND utl_match.jaro_winkler_similarity(m.SNAME,m2.SNAME) > 90
AND utl_match.jaro_winkler_similarity(m.FNAME,m2.FNAME) > 95))
Where dups_key IS NOT NULL;
我试图编写这个存储过程:
CREATE OR REPLACE PROCEDURE JW_DBL_POT
(
P_SNAME IN NUMBER
, P_FNAME IN NUMBER
, P_RC OUT SYS_REFCURSOR
) AS
BEGIN
OPEN P_RC
EXECUTE IMMEDIATE
CREATE TABLE DBL_JW AS
SELECT * FROM (
SELECT m.IDM,
m2.IDM AS dups_key
FROM members_tbl m
LEFT OUTER JOIN members_tbl m2
ON ( m.IDM != m2.IDM
AND m.DBIRTH = m2.DBIRTH
AND utl_match.jaro_winkler_similarity(m.SNAME,m2.SNAME) > P_SNAME
AND utl_match.jaro_winkler_similarity(m.FNAME,m2.FNAME) > P_FNAME ))
Where dups_key IS NOT NULL;
END JW_DBL_POT;
我遇到这个错误:
- PLS-00103:遇到符号“CREATE”
即使删除EXECUTE IMMEDIATE
指令,我也有同样的错误。我该如何管理它?
THX
答案 0 :(得分:0)
如果您绝对必须将此信息存储在表格中,则听起来只是在修复数据的过程中暂时需要它。
不是每次运行代码时都创建一个表,然后在你完成它之后删除它(这就是我假设你的计划是针对这个表的!),为什么不创建一个全局临时表( GTT)一次,然后用它来存储基于每个会话的数据 - 即。只有您的会话才能看到该会话期间存储的数据。