【问题标题】:Merge two tables in PL/SQL block合并 PL/SQL 块中的两个表
【发布时间】:2015-03-01 18:51:31
【问题描述】:

我有接下来的 3 张桌子:

  • Fibonacci(id, value) 前 1000 个斐波那契数。
  • Prime(id, value) 前 2000 个素数。
  • FiboPrime(value, prime),最初表格是空的。

我必须用斐波那契表中的素数填充 FiboPrime 表(prime=1 => 数字是素数,否则数字不是素数。)

我必须使用 MERGE 语句,这是尝试:

DECLARE

    BEGING
        MERGE INTO FiboPrime fp
         USING fibonacci f, prime p
         ON (f.value=p.value)
        WHEN MATCHED THEN
         UPDATE SET
          fp.value=f.value,
          fp.prime=1;
    WHEN NOT MATCHED THEN
     INSERT VALUES(f.value,0);
END;

我收到下一个错误:在预期以下情况之一时出现符号“INTO”: := .( @ ; 不是空范围字符。谁能帮我解决?

【问题讨论】:

  • 这里多了一个分号:fp.prime=1;。整个MERGE 应该只有一个分号。

标签: sql oracle plsql sql-merge


【解决方案1】:

声明

开始

  1. 您不需要关键字DECLARE,因为您没有要声明的内容。

  2. 关键字是BEGIN 并且不开始

  3. USING 子句修改为SELECT 查询。例如:

USING (select t1.col1,t2.col2 from t1,t2)

  1. 我认为在 PL/SQL 中没有任何理由这样做。将MERGE 作为 SQL 执行。不需要用BEGIN-END 块包装它。

【讨论】:

    【解决方案2】:
    MERGE INTO FiboPrime fp
             USING ( select Fibonacci.value f, Prime.value p from Fibonacci, prime ) t
             ON (t.f = t.p)
            WHEN MATCHED THEN
             UPDATE SET
              fp.value=t.f,
              fp.prime=1
        WHEN NOT MATCHED THEN
         INSERT  VALUES(t.f,0);
    

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多