在PL/SQL块中合并两个表

在PL/SQL块中合并两个表,sql,oracle,plsql,sql-merge,Sql,Oracle,Plsql,Sql Merge,我有下面3张桌子: Fibonaccid,值前1000个fibonacci数。 Primeid,值前2000个素数。 FiboPrimevalue,prime,最初该表为空。 我必须用Fibonacci表prime=1=>中的素数填充FiboPrime表,否则该数不是素数 我必须使用MERGE语句,这是一种尝试: DECLARE BEGING MERGE INTO FiboPrime fp USING fibonacci f, prime p

我有下面3张桌子:

Fibonaccid,值前1000个fibonacci数。 Primeid,值前2000个素数。 FiboPrimevalue,prime,最初该表为空。 我必须用Fibonacci表prime=1=>中的素数填充FiboPrime表,否则该数不是素数

我必须使用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;
我遇到下一个错误:当预期出现以下情况之一时,将符号输入: := . @ ; 非空范围字符。谁能帮我解决这个问题

申报

乞求

您不需要关键字DECLARE,因为您没有任何东西要声明

关键字是BEGIN而不是BEGING

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

使用从t1,t2中选择t1.col1,t2.col2

我看不出有任何理由在PL/SQL中这样做。以SQL的形式执行合并。无需用始端块将其包裹。
这里有一个额外的分号:fp.prime=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);