如何将用户生成的 Oracle EBS 电子表格转换为 SQL 驱动的脚本?
How do I convert a user-generated Oracle EBS spreadsheet into a SQL-driven script?
我需要将手动创建的电子表格转换为 SQL 报告。该报告是通过 Oracle Forms(BI Suite 应用程序之一)生成的。
有一个收件箱,其中有许多票据,由 "Request Number"
标识
每个请求编号都是系统中的一个服务台工单。这是该电子表格的屏幕截图:
列的完整列表(带描述):
Request No.
Modules
Submitted ( the request being submitted , a timestamp )
Supervisor ( the request being approved , by supervisor )
Average Supervisor Approval Duration
Responsibility
Average Resp. Approval Duration
Training (the request being approved for completing training)
Average Training Approval Duration -
Configuration - depending on whether its PRISM or iProcurement
Average Config. Approval Duration
Approved
Total Overall Duration
Security
Average Security Approval Duration
SOD
Avg SOD Approval Duration
所以我想做的是使用 SQL 脚本生成其中的一部分或全部。
我的一个问题是..对于特定的 "Request Number" 我经常会在数据库中得到冗余和冲突的数据。
以下是我目前的查询。
SELECT hur.reg_request_id AS "Request No",
RESPONSIBILITY_NAME AS "Module",
to_char(hur.creation_date, 'DD-Mon-YYYY HH24:MI:SS') AS "Submitted" ,
to_char(hur.last_update_date, 'DD-Mon-YYYY HH24:MI:SS') AS "Supervisor" ,
ROUND((hur.last_update_date - hur.creation_date), 3 ) ||
' days' AS "Avg Supervisor Appr Duration" ,
/* hura.creation_date AS "Responsibility" */,
NULL AS "Avg Resp Appr Duration", NULL AS "Training",
NULL AS "Avg Training Appr Duration" ,
hur.LAST_UPDATE_DATE AS "Security",
NULL AS "Avg Security Appr Duration",
NULL AS "SOD",
NULL AS "Average SOD Approval Duration" ,
NULL AS "Configuration",
NULL AS "Avg Config Appr Duration",
hurr.last_update_date AS "Approved",
ROUND( hurr.last_update_date - hur.creation_date, 2 )
AS "Total Overall Duration",
NULL AS "Notes"
FROM HHS_UMX_REG_SERVICES hur
JOIN fnd_responsibility_vl frt
ON (hur.responsibility_id = frt.responsibility_id and
hur.responsibility_application_id = frt.application_id)
JOIN
hhs_umx_reg_requests hurr ON
(hurr.reg_request_id = hur.reg_request_id )
/* JOIN hhs_umx_resp_activity hura */
left outer JOIN
hhs_umx_resp_activity
hura ON (hur.reg_request_id = hura.reg_request_id )--ADD ON
WHERE EXISTS (
SELECT NULL FROM hhs_umx_resp_activity hura
WHERE hura.created_by = hur.created_by
AND
hura.creation_date > hur.creation_date)
AND hur.reg_request_id IN
('263428', '263458', '263473',
'264717', '263402', '263404',
'262671', '263229', '263268')
ORDER BY hur.reg_request_id ASC
这是架构:
HHS_UMX_RESP_ACTIVITY
HHS_UMX_REG_SERVICES
fnd_responsibility_vl
**hhs_umx_reg_requests**
谢谢
我已经用 Perl 做过很多次了。有用于读取电子表格的包,因此只需编写脚本即可生成所需的插入语句。然后将它写入一个漂亮的 .SQL 文本文件,然后可以由 SQL 开发人员或您正在使用的任何 IDE 执行。或者直接从 Perl 脚本执行它。
作为一个简单的解决方案,您可以只创建在 SQL 命令中将列相加的行。像 "INSERT INTO TABLE ('REQ_NO', 'MODULE') VALUES (A2, B2)" 之类的东西。然后你可以使用 excel 函数为每一行一次又一次地复制它。
另一个简单的解决方案是将电子表格另存为 CSV(尝试使用确切的 CSV 格式以查看适合您的格式),然后您可以将其导入 SQL table 在那里玩。
当然还有像 TommCatt 指出的其他更高级的解决方案。
如果没有重现问题的样本表(只有几行),很难诊断。
我认为您的重复数据来自错误的连接。
您可以尝试从查询中完全删除 hhs_umx_resp_activity
(我看到您评论了使用它的地方)。
然后,如果它继续,它必须与 hhs_umx_reg_requests
上的连接相关(您可以连接一个额外的列或用其他东西替换此连接,例如 outer apply
)。
我需要将手动创建的电子表格转换为 SQL 报告。该报告是通过 Oracle Forms(BI Suite 应用程序之一)生成的。
有一个收件箱,其中有许多票据,由 "Request Number"
标识每个请求编号都是系统中的一个服务台工单。这是该电子表格的屏幕截图:
列的完整列表(带描述):
Request No.
Modules
Submitted ( the request being submitted , a timestamp )
Supervisor ( the request being approved , by supervisor )
Average Supervisor Approval Duration
Responsibility
Average Resp. Approval Duration
Training (the request being approved for completing training)
Average Training Approval Duration -
Configuration - depending on whether its PRISM or iProcurement
Average Config. Approval Duration
Approved
Total Overall Duration
Security
Average Security Approval Duration
SOD
Avg SOD Approval Duration
所以我想做的是使用 SQL 脚本生成其中的一部分或全部。
我的一个问题是..对于特定的 "Request Number" 我经常会在数据库中得到冗余和冲突的数据。
以下是我目前的查询。
SELECT hur.reg_request_id AS "Request No",
RESPONSIBILITY_NAME AS "Module",
to_char(hur.creation_date, 'DD-Mon-YYYY HH24:MI:SS') AS "Submitted" ,
to_char(hur.last_update_date, 'DD-Mon-YYYY HH24:MI:SS') AS "Supervisor" ,
ROUND((hur.last_update_date - hur.creation_date), 3 ) ||
' days' AS "Avg Supervisor Appr Duration" ,
/* hura.creation_date AS "Responsibility" */,
NULL AS "Avg Resp Appr Duration", NULL AS "Training",
NULL AS "Avg Training Appr Duration" ,
hur.LAST_UPDATE_DATE AS "Security",
NULL AS "Avg Security Appr Duration",
NULL AS "SOD",
NULL AS "Average SOD Approval Duration" ,
NULL AS "Configuration",
NULL AS "Avg Config Appr Duration",
hurr.last_update_date AS "Approved",
ROUND( hurr.last_update_date - hur.creation_date, 2 )
AS "Total Overall Duration",
NULL AS "Notes"
FROM HHS_UMX_REG_SERVICES hur
JOIN fnd_responsibility_vl frt
ON (hur.responsibility_id = frt.responsibility_id and
hur.responsibility_application_id = frt.application_id)
JOIN
hhs_umx_reg_requests hurr ON
(hurr.reg_request_id = hur.reg_request_id )
/* JOIN hhs_umx_resp_activity hura */
left outer JOIN
hhs_umx_resp_activity
hura ON (hur.reg_request_id = hura.reg_request_id )--ADD ON
WHERE EXISTS (
SELECT NULL FROM hhs_umx_resp_activity hura
WHERE hura.created_by = hur.created_by
AND
hura.creation_date > hur.creation_date)
AND hur.reg_request_id IN
('263428', '263458', '263473',
'264717', '263402', '263404',
'262671', '263229', '263268')
ORDER BY hur.reg_request_id ASC
这是架构:
HHS_UMX_RESP_ACTIVITY
HHS_UMX_REG_SERVICES
fnd_responsibility_vl
**hhs_umx_reg_requests**
谢谢
我已经用 Perl 做过很多次了。有用于读取电子表格的包,因此只需编写脚本即可生成所需的插入语句。然后将它写入一个漂亮的 .SQL 文本文件,然后可以由 SQL 开发人员或您正在使用的任何 IDE 执行。或者直接从 Perl 脚本执行它。
作为一个简单的解决方案,您可以只创建在 SQL 命令中将列相加的行。像 "INSERT INTO TABLE ('REQ_NO', 'MODULE') VALUES (A2, B2)" 之类的东西。然后你可以使用 excel 函数为每一行一次又一次地复制它。
另一个简单的解决方案是将电子表格另存为 CSV(尝试使用确切的 CSV 格式以查看适合您的格式),然后您可以将其导入 SQL table 在那里玩。
当然还有像 TommCatt 指出的其他更高级的解决方案。
如果没有重现问题的样本表(只有几行),很难诊断。
我认为您的重复数据来自错误的连接。
您可以尝试从查询中完全删除 hhs_umx_resp_activity
(我看到您评论了使用它的地方)。
然后,如果它继续,它必须与 hhs_umx_reg_requests
上的连接相关(您可以连接一个额外的列或用其他东西替换此连接,例如 outer apply
)。