Oracle 插入时出现无效号码错误

问题描述 投票:0回答:1

我正在尝试运行插入选择查询。但无论我做什么,我都会收到“无效号码”错误。

我的查询是这样的;

INSERT INTO banka_odeme (banka_id, banka_ad, banka_tutar, aciklama, banka_ismi)
SELECT 
    (SELECT MAX(banka_id) + 1 FROM banka_odeme),
    w.first_name || ' ' || w.last_name,
    TO_NUMBER(w.total),
    TO_NUMBER(w.id),
    'SiPay'
FROM 
    woo_orders w 
WHERE 
    NOT EXISTS (SELECT 1 FROM banka_odeme WHERE banka_odeme.aciklama = TO_NUMBER(w.id));

我的表结构是这样的; (请检查下面的图片链接)

Banka_Odeme Table

Woo_Orders Table

提前感谢任何试图提供帮助的人:))

我已经尝试了所有可能的查询组合,但仍然给出相同的错误。 :(

oracle sql-insert
1个回答
0
投票
  • w.total
    w.id
    已经是数字 - 不要在它们上使用
    TO_NUMBER
  • 不要使用
    (SELECT MAX(banka_id) + 1 FROM banka_odeme)
    生成序列中的下一个数字,应使用正确的
    SEQUENCE
  • banka_odeme.aciklama
    是字符串,
    w.id
    是数字。当您比较它们时,要么将字符串转换为数字
    TO_NUMBER(banka_odeme.aciklama) = w.id
    (但如果它总是可转换为数字,那么为什么要将其存储为字符串)或将数字转换为字符串
    banka_odeme.aciklama = TO_CHAR(w.id)
  • 如果您想将一个表合并到另一个表中,则可以使用
    MERGE
    语句。

所以:

DECLARE
  v_sql VARCHAR2(200);
  v_id  BANKA_ODEME.BANKA_ID%TYPE;
BEGIN
  SELECT MAX(banka_id) + 1
  INTO   v_id
  FROM   banka_odeme;

  v_sql := 'CREATE SEQUENCE banka_odeme__banka_id__seq START FROM ' || v_id;
  EXECUTE IMMEDIATE v_sql;
END;
/

然后:

MERGE INTO banka_odeme b
USING woo_orders w
ON (b.aciklama = TO_CHAR(w.id)
WHEN NOT MATCHED THEN
  INSERT (
    banka_id,
    banka_ad,
    banka_tutar,
    aciklama,
    banka_ismi
  ) VALUES (
    banka_odeme__banka_id__seq.NEXTVAL,
    w.first_name || ' ' || w.last_name,
    w.total,
    TO_CHAR(w.id),
    'SiPay'
  );
© www.soinside.com 2019 - 2024. All rights reserved.