[英]Update table from another table in oracle
我在数据库中有两个表,第一个是以下内容:第一个表是EMPSHIFT
EmployeeID 01/04/2017 02/04/2017 03/04/2017 04/04/2017 to 30/04/2017 -------------------------------------------------------------------------------- 1 7,6 2 3 4 to end of all employees
第二张表是SCHEDULEEMPLOYEES
EmployeeID DayDate Shift ------------------------------------ 1 01/04/2017 7,6 1 02/04/2017 5,2 1 03/04/2017 7,6 1 04/04/2017 9 2 01/04/2017 9 2 02/04/2017 3,2 3 01/04/2017 7,6 3 03/04/2017 9 to the end of table data
我想让PL-SQL存储过程或SQL语句从第二个表更新第一个表数据,以便将班次数据设置为特定的列日期,例如EmployeeID = 1他在01/04/2017的班次= 7,6
我曾尝试到现在是下面我试图到目前为止什么
但不起作用对此有任何帮助
在这种情况下,您应该使用MERGE语句,如下所示:
DECLARE
l_date DATE:=TO_DATE('01/04/2017','DD/MM/YYYY');
BEGIN
LOOP
EXECUTE IMMEDIATE 'MERGE INTO EMPSHIFT E
USING SCHEDULEEMPLOYEES S
ON (S.EMPLOYEEID=E.EMPLOYEEID AND S.DAYDATE=TO_DATE('''||TO_CHAR(l_date)||''',''DD/MM/YYYY''))
WHEN MATCHED
THEN UPDATE SET E."'||TO_CHAR(l_date)||'"=S.SHIFT';
l_date:=l_date+1;
EXIT
WHEN l_date>TO_DATE('30/04/2017','DD/MM/YYYY');
END LOOP;
END;
您提到要更新记录,但是如果要插入丢失的记录(对于EMPSHIFT表中缺少的EMPLOYEEID),请参考merge_insert_clause
或您谈论枢轴/非枢轴(Oracle 11g中存在)
SELECT *
FROM (SELECT DayDate,
EmployeeID,
SUM(Shift) shift
FROM SCHEDULEEMPLOYEES
GROUP BY DayDate,
EmployeeID)
PIVOT(SUM(shift)
FOR DayDate IN(to_date('01/04/2017',
'mm/dd/yyyy'),
to_date('02/04/2017',
'mm/dd/yyyy'),
to_date('03/04/2017',
'mm/dd/yyyy'),
to_date('04/04/2017',
'mm/dd/yyyy')));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.