Oracle UPDATE有两个子查询

时间:2017-06-30 08:08:53

标签: sql oracle

如何访问我想在第二个子查询中更新的表? 让我解释一下,我有更新查询:

UPDATE someTbl tbl
SET
    x_price = (
        SELECT
            substr(
                func.x_price,
                7,
                instr(
                    func.x_price,
                    '=',
                    7
                ) - 7
            )
        FROM
            (
                SELECT
                    somePackage.someFunction(
                        pbi.product_id,
                        pbi.x_sset_id,
                        pbi.inst_prod_id,
                        SYSDATE,
                        '',
                        '',
                        '',
                        ''
                    ) AS x_price
                FROM
                    someTbl pbi
            ) func
    );

我必须创建限制第二个子查询的条件,因为我得到了

ORA-01427: single-row subquery returns more than one row

我需要构建条件来定义主表tbl和第二个子查询func之间的关系 我是oracle sql的初学者。你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

消息“ORA-01427:单行子查询返回多行”当结果信任是单行但结果是多行时返回,上面设置的字段语句值必须是一行一个值!!!

抱歉英语不好

答案 1 :(得分:0)

您需要关联两个查询:

UPDATE someTbl tbl
SET x_price = (
        SELECT substr( x_price, 7, instr( x_price, '=', 7 ) - 7 )
        FROM   (
          SELECT somePackage.someFunction(
                   product_id,
                   x_sset_id,
                   inst_prod_id,
                   SYSDATE,
                   '',
                   '',
                   '',
                   ''
                 ) AS x_price,
                 your_primary_key              -- Add primary key to inner query
          FROM   someTbl
        ) func
        WHERE tbl.your_primary_key = func.your_primary_key
                                               -- Add filter to outer query which will
                                               -- correlate the rows from the update and
                                               -- the sub-query.
    );

否则,您的子查询将返回表的所有行。