我正在尝试运行插入选择查询。但无论我做什么,我都会收到“无效号码”错误。
我的查询是这样的;
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));
我的表结构是这样的; (请检查下面的图片链接)
提前感谢任何试图提供帮助的人:))
我已经尝试了所有可能的查询组合,但仍然给出相同的错误。 :(
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'
);