【问题标题】:Create stored procedures from create and select statements从 create 和 select 语句创建存储过程
【发布时间】:2015-08-28 10:13:25
【问题描述】:

我需要创建一个存储过程,我必须从选择语句中创建一个表,我必须在其中插入参数。 这是我的查询:

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 指令,我也有同样的错误。我该如何管理它? 谢谢

【问题讨论】:

  • 您没有将a string argument 传递给execute immediateP_RC 应该包含什么内容?无论如何,您为什么要在运行时创建表?还是在其他表中复制数据的表(然后会过时)?

标签: sql oracle stored-procedures plsql


【解决方案1】:

如果您绝对必须将这些信息存储在表格中,听起来它只是作为修复数据过程的一部分临时需要。

与其在每次运行代码时创建一个表,然后在完成后将其删除(我假设您的计划是针对此表的!),不如创建一个全局临时表 (GTT)一次,然后使用它在每个会话的基础上存储数据 - 即。只有您的会话才能看到该会话期间存储在那里的数据。

【讨论】:

  • 您好,感谢您的建议;我不知道。那么如何使用 Global Temporary Table 来编写呢?
  • 我强烈建议您阅读有关 GTT 的信息。 Try this 开始。文档中还有很多内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多