Database 从多个表中选择时的Oracle插入
这个查询有什么问题?我的insert需要从其他表中获取数据,但当我使用select时,它会给我带来错误 以下是查询:Database 从多个表中选择时的Oracle插入,database,oracle,oracle11g,Database,Oracle,Oracle11g,这个查询有什么问题?我的insert需要从其他表中获取数据,但当我使用select时,它会给我带来错误 以下是查询: INSERT INTO PAYMENT ( OWNER_HI, ACCOUNT_ID, DATE_PAYMENT, ACCOUNT_VALUE_BEFORE, CURRENCY,EXCHANGE_RATE, SUM, SUM_USD, DATE_INPUT, OPERATOR_ID, DOCUMENT, INVOICE_ID) VALU
INSERT INTO PAYMENT (
OWNER_HI,
ACCOUNT_ID,
DATE_PAYMENT,
ACCOUNT_VALUE_BEFORE,
CURRENCY,EXCHANGE_RATE,
SUM,
SUM_USD,
DATE_INPUT,
OPERATOR_ID,
DOCUMENT,
INVOICE_ID)
VALUES (
OWNER,
ID,
TODAY,
SALDO,
CURRENCY,
RATE,
50,
(50 * RATE),
TODAY,
386,
'teste sis',
null)
(SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') "NOW" FROM DUAL) TODAY
(SELECT VALUE FROM ACCOUNT WHERE ACCOUNT_ID = 386) SALDO
(SELECT CURRENCY_IDCURRENCY_ID FROM CURRENCY_EXCHANGE WHERE rownum=1 ORDER BY CURRENCY_ID DESC) CURRENCY
(SELECT EXCHANGE_RATE FROM CURRENCY_EXCHANGE WHERE rownum=1 ORDER BY CURRENCY_ID DESC) RATE;
这就是错误:
错误的SQL:ORA-00933:SQL命令未正确结束93300000-“SQL命令未正确结束”
也许你的意思更像
INSERT INTO PAYMENT (
OWNER_HI,
ACCOUNT_ID,
DATE_PAYMENT,
ACCOUNT_VALUE_BEFORE,
CURRENCY,EXCHANGE_RATE,
SUM,
SUM_USD,
DATE_INPUT,
OPERATOR_ID,
DOCUMENT,
INVOICE_ID)
VALUES (
OWNER,
ID,
TO_CHAR(SYSDATE, 'YYYY-MM-DD'),
(SELECT VALUE FROM ACCOUNT WHERE ACCOUNT_ID = 386),
(SELECT CURRENCY_IDCURRENCY_ID FROM CURRENCY_EXCHANGE WHERE rownum=1 ORDER BY CURRENCY_ID DESC),
(SELECT EXCHANGE_RATE FROM CURRENCY_EXCHANGE WHERE rownum=1 ORDER BY CURRENCY_ID DESC),
50,
(50 * RATE),
TODAY,
386,
'teste sis',
null);
祝你好运。也许你的意思更像
INSERT INTO PAYMENT (
OWNER_HI,
ACCOUNT_ID,
DATE_PAYMENT,
ACCOUNT_VALUE_BEFORE,
CURRENCY,EXCHANGE_RATE,
SUM,
SUM_USD,
DATE_INPUT,
OPERATOR_ID,
DOCUMENT,
INVOICE_ID)
VALUES (
OWNER,
ID,
TO_CHAR(SYSDATE, 'YYYY-MM-DD'),
(SELECT VALUE FROM ACCOUNT WHERE ACCOUNT_ID = 386),
(SELECT CURRENCY_IDCURRENCY_ID FROM CURRENCY_EXCHANGE WHERE rownum=1 ORDER BY CURRENCY_ID DESC),
(SELECT EXCHANGE_RATE FROM CURRENCY_EXCHANGE WHERE rownum=1 ORDER BY CURRENCY_ID DESC),
50,
(50 * RATE),
TODAY,
386,
'teste sis',
null);
祝你好运。我们不能混用插入。。。值并插入。。。选择语法。选择一个或另一个。由于需要其他表中的值,因此需要插入。。。选择 您正在查询的表之间没有关系,因此请使用交叉联接。只要您只从每行中选择一行,这不会产生问题
SELECT EXCHANGE\u RATE FROM CURRENCY\u EXCHANGE,其中rownum=1 ORDER BY CURRENCY\u ID DESC
不会执行您认为它会执行的操作,因为rownum是在排序之前而不是之后分配的。要获取最高货币,请在子查询中使用分析函数,如ROW\u NUMBER()
,并对其进行筛选
我不得不做一些猜测,因为您不清楚您正在实施的所有业务规则,但您需要这样的东西:
INSERT INTO PAYMENT (
OWNER_HI,
ACCOUNT_ID,
DATE_PAYMENT,
ACCOUNT_VALUE_BEFORE,
CURRENCY,EXCHANGE_RATE,
SUM,
SUM_USD,
DATE_INPUT,
OPERATOR_ID,
DOCUMENT,
INVOICE_ID)
select user, -- where does OWNER come from??
saldo.account_id,
trunc(sysdate),
SALDO.value,
CURRENCY.CURRENCY_ID ,
CURRENCY.EXCHANGE_RATE ,
50,
(50 * CURRENCY.EXCHANGE_RATE ),
trunc(sysdate),
386,
'teste sis',
null
from ( select CURRENCY_ID,
EXCHANGE_RATE,
row_number() over (order by CURRENCY_ID DESC ) as rn
FROM CURRENCY_EXCHANGE ) currency
cross join
(SELECT * FROM ACCOUNT WHERE ACCOUNT_ID = 386) SALDO
where currency.rn = 1
注意:我忽略了将
sysdate
转换为字符串(如“今天”),因为将日期存储为字符串是一种非常糟糕的做法。我希望您只是在等待从sysdate
中剥离时间元素,这也可以通过截断来实现。我们不能混合插入。。。值并插入。。。选择语法。选择一个或另一个。由于需要其他表中的值,因此需要插入。。。选择
您正在查询的表之间没有关系,因此请使用交叉联接。只要您只从每行中选择一行,这不会产生问题
SELECT EXCHANGE\u RATE FROM CURRENCY\u EXCHANGE,其中rownum=1 ORDER BY CURRENCY\u ID DESC
不会执行您认为它会执行的操作,因为rownum是在排序之前而不是之后分配的。要获取最高货币,请在子查询中使用分析函数,如ROW\u NUMBER()
,并对其进行筛选
我不得不做一些猜测,因为您不清楚您正在实施的所有业务规则,但您需要这样的东西:
INSERT INTO PAYMENT (
OWNER_HI,
ACCOUNT_ID,
DATE_PAYMENT,
ACCOUNT_VALUE_BEFORE,
CURRENCY,EXCHANGE_RATE,
SUM,
SUM_USD,
DATE_INPUT,
OPERATOR_ID,
DOCUMENT,
INVOICE_ID)
select user, -- where does OWNER come from??
saldo.account_id,
trunc(sysdate),
SALDO.value,
CURRENCY.CURRENCY_ID ,
CURRENCY.EXCHANGE_RATE ,
50,
(50 * CURRENCY.EXCHANGE_RATE ),
trunc(sysdate),
386,
'teste sis',
null
from ( select CURRENCY_ID,
EXCHANGE_RATE,
row_number() over (order by CURRENCY_ID DESC ) as rn
FROM CURRENCY_EXCHANGE ) currency
cross join
(SELECT * FROM ACCOUNT WHERE ACCOUNT_ID = 386) SALDO
where currency.rn = 1
注意:我忽略了将
sysdate
转换为字符串(如“今天”),因为将日期存储为字符串是一种非常糟糕的做法。我希望您只是在等待从sysdate
中剥离时间元素,我们也可以通过截断来实现这一点。null);-缺少分号(空);-缺少分号现在返回:Relatório de erros-Erro de SQL:ORA-00907:缺少右括号00907。00000-“缺少右括号”来自Bob的SQL看起来不错。可能有一些引号字符的复制粘贴错误。现在返回:Relatório de erros-Erro de SQL:ORA-00907:缺少右括号00907。00000-“缺少右括号”来自Bob的SQL看起来不错。可能有一些引号字符的复制粘贴错误。