从create和select语句创建存储过程

时间:2015-08-28 10:13:25

标签: sql oracle stored-procedures plsql

我需要创建一个存储过程,我必须从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

1 个答案:

答案 0 :(得分:0)

如果您绝对必须将此信息存储在表格中,则听起来只是在修复数据的过程中暂时需要它。

不是每次运行代码时都创建一个表,然后在你完成它之后删除它(这就是我假设你的计划是针对这个表的!),为什么不创建一个全局临时表( GTT)一次,然后用它来存储基于每个会话的数据 - 即。只有您的会话才能看到该会话期间存储的数据。