2

我有接下来的 3 张桌子:

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

我必须使用斐波那契表中的素数填充 FiboPrime 表(素数 = 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”出现::= .(@;不是空范围字符。谁能帮我解决这个问题?

4

2 回答 2

5

宣布

开始

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

  2. 关键字是BEGIN不是开始

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

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

  1. 我看不出有任何理由在PL/SQL中这样做。执行MERGEas SQL。无需用BEGIN-END块包裹它。
于 2015-03-01T19:22:02.910 回答
1
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);
于 2015-03-01T19:22:41.027 回答