Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在Oracle PL/SQL脚本中,是否将所有记录的[FIeldX]值设置为相同的值?_Database_Oracle_Plsql_Oracle11g - Fatal编程技术网

Database 在Oracle PL/SQL脚本中,是否将所有记录的[FIeldX]值设置为相同的值?

Database 在Oracle PL/SQL脚本中,是否将所有记录的[FIeldX]值设置为相同的值?,database,oracle,plsql,oracle11g,Database,Oracle,Plsql,Oracle11g,我编写了一个Oracle DB转换脚本,它将数据从以前的单一表传输到一个新的DB,其中包含一个主表和几个子/引用/维护表。当然,这个更标准化的布局以前可能有,比如Bob/Storage Room/天花板,因为[Location]值比旧表有更多字段,因此无法准确转换 目前,我已经在每个子表中插入了一个记录值ex.[NO_CONVERSION_DATA]。对于我的主表,我需要将ex.[Color_ID]设置为22,[Type_ID]设置为57,因为这些新字段每年都没有显式转换,所有这些记录都会更新,

我编写了一个Oracle DB转换脚本,它将数据从以前的单一表传输到一个新的DB,其中包含一个主表和几个子/引用/维护表。当然,这个更标准化的布局以前可能有,比如Bob/Storage Room/天花板,因为[Location]值比旧表有更多字段,因此无法准确转换

目前,我已经在每个子表中插入了一个记录值ex.[NO_CONVERSION_DATA]。对于我的主表,我需要将ex.[Color_ID]设置为22,[Type_ID]设置为57,因为这些新字段每年都没有显式转换,所有这些记录都会更新,并且在下一次更新之后,所有记录都将以正确的字段值存在,因此占位符值/记录[no_conversion_DATA]将从子表中删除

我同样需要设置[Status_Id],如下所示:

INSERT INTO TABLE1 (STATUS_ID)
VALUES
    -- Status was not set as Recycled, Disposed, etc. during Conversion
    IF STATUS_ID IS NULL THEN
        (CASE
            -- [Owner] field has a value, set ID to 2 (Assigned)
            WHEN RTRIM(LTRIM(OWNER)) IS NOT NULL THEN 2
            -- [Owner] field has no value, set ID to 1 (Available)
            WHEN RTRIM(LTRIM(OWNER)) IS NULL THEN 1
        END as Status)
有谁对Oracle&PL/SQL有更丰富的经验,可以为我在这里尝试的工作提供语法/布局方面的帮助吗

好的,我知道了如何将所有行的2个特定列设置为相同的值:

UPDATE TABLE1
SET COLOR_ID = 24;
UPDATE INV_ASSETSTEST
SET TYPE_ID = 20;
我仍在试图根据[OWNER]字段中的值NULL/notnull设置STATUS_ID。Coco下面的解决方案在first glace关于他的评论时看起来不错,而不是发布的解决方案本身,但下面的内容会导致我的每个不可为空的列被标记,并且该语句将不会执行:

INSERT INTO TABLE1(STATUS_ID)
    SELECT CASE 
        WHEN STATUS_ID IS NULL THEN
            CASE
                WHEN TRIM(OWNER) IS NULL THEN 1
                WHEN TRIM(OWNER) IS NOT NULL THEN 2
            END
    END FROM TABLE1;
我尝试将类似的UPDATE语句拼凑在一起,但到目前为止运气不佳。

试试这个

INSERT INTO TABLE1 (STATUS_ID)
VALUES
    (
    case
        when TATUS_ID IS NULL THEN
        (CASE
            -- [Owner] field has a value, set ID to 2 (Assigned)
            WHEN RTRIM(LTRIM(OWNER)) IS NOT NULL THEN 2
            -- [Owner] field has no value, set ID to 1 (Available)
            WHEN RTRIM(LTRIM(OWNER)) IS NULL THEN 1
        END )
    end);

你的主人来自哪里?请描述一下该语句应该做什么。@PavelGatnar,我相信你在我提供的代码中的注释中所问的是什么??我正在尝试检查[Status_ID]字段中的值-如果不是NULL,请将[OWNER]值设置为2,否则将NULL设置为1。这是无效的SQL。不能在值中引用表的列clause@a_horse_with_no_name,这似乎正是我最初发布的尝试中遇到的问题。关于我要做的事情,有什么建议吗?插入testid中,选择id为null时的case,然后选择trimowner为null时的case,然后选择trimowner为null时的case,然后选择trimowner为null时的'1',然后选择'1'结束测试@coco,我认为这可能是解决方案,但当我尝试此方法时,我的每个列都会出现一个不接受空值的错误。我已经有了数据,我只需要循环遍历它,并按照描述执行,并将状态_ID设置为1或2,其中[Owner]在记录中为空/非空。