SYSTEM.LAST_QUERY

SYSTEM.LAST_QUERY

Represents the query SELECT statement that Oracle Forms most recently used to populate a block during the current Run form session. The value is always a character string.


从上面的Last_Query定义的解读:
1.SYSTEM.LAST_QUERY返回的只能是查询(Select)的SQL语句,不会有Update,Insert,Delete SQL语句;
2."The current Run form session"说明不同的Form,SYSTEM.LAST_QUERY可以有不同的值的,不会混淆;
3."Used to populate a block"说明只有查询类的Block,才能查出值来。所以不要指望,执行一个LOV后,SYSTEM.LAST_QUERY返回一个查询语句


System.Last_Query的业务处理的逻辑代码写在框架APPCORE.pld

按修改后的脚本运行,还是报错 2025-11-13 11:26:14 Error -1 (00000) : Error while executing SQL "/**/ SELECT t5.edw_valid_flag, t5.edw_data_source, t5.edw_create_date, t5.edw_last_update, t5.contract_number, t5.product_type, t5.segment1, t5.description, t5.quantity_issued, t5.salesrep_name, t5.salesdep_name, t5.s40_date, t5.entity_name, t5.prod_line_name, t5.prod_team_name, t5.prod_group_name, t5.prod_class_check_name, t5.project_number, t5.project_name, t5.name, t5.overall_unit_name, t5.device_type, t5.unit_num, t5.dates, t5.yys, t5.l5_name, t5.l5_unit, t5.l4_name, t5.l4_unit, t5.l3_name, t5.l3_unit, t5.l2_name, t5.l2_unit, t5.l1_name, t5.l1_unit, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN '数字能源产品' ELSE t5.prod_group_name END AS prod_group_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN 'TE' ELSE t5.prod_team_name END AS prod_team_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN 'POWER' ELSE t5.prod_line_name END AS prod_line_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN 'POWER' ELSE t5.prod_class_check_name END AS prod_class_check_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN '电源' ELSE t5.l1_name END AS l1_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN 'PAD电源' ELSE t5.l2_name END AS l2_name FROM dm_plan_shipping_statistics_11 t5 WHERE t5.l3_name = 'P电源(调拨)'": Remote driver error: OlapException: Query failed (#20251113_032613_13537_iezz7): line 1:8: Column 't5.edw_valid_flag' cannot be resolved -> SQLException: Query failed (#20251113_032613_13537_iezz7): line 1:8: Column 't5.edw_valid_flag' cannot be resolved -> FailureException: line 1:8: Column 't5.edw_valid_flag' cannot be resolved
11-14
你这次的报错信息是关键: ``` Column 't5.edw_valid_flag' cannot be resolved ``` 并且类似的字段都报了这个错误。 这说明:**表 `dm_plan_shipping_statistics_11` 并不存在于当前默认的 schema 中,或者没有指定 catalog 和 schema!** --- ## 🔥 根本原因:缺少完整的表路径(catalog.schema.table) 虽然你的 SQL 语法现在是对的(上一轮已修复),但 Trino 找不到这张表中的任何列,因为: > 你写了: ```sql FROM dm_plan_shipping_statistics_11 t5 ``` 而不是: ```sql FROM hive.dw.dm_plan_shipping_statistics_11 t5 -- 示例 ``` Trino 不知道 `dm_plan_shipping_statistics_11` 属于哪个 **catalog**(如 `hive`、`iceberg`)和哪个 **schema**(如 `dw`, `dwd`, `tmp`),所以无法解析其中的列。 --- ## ✅ 解决方案:为表名加上完整的 `catalog.schema.` 前缀 ### ✅ 修改后的正确 SQL(重点在 `FROM` 子句) ```sql SELECT t5.edw_valid_flag, t5.edw_data_source, t5.edw_create_date, t5.edw_last_update, t5.contract_number, t5.product_type, t5.segment1, t5.description, t5.quantity_issued, t5.salesrep_name, t5.salesdep_name, t5.s40_date, t5.entity_name, t5.prod_line_name, t5.prod_team_name, t5.prod_group_name, t5.prod_class_check_name, t5.project_number, t5.project_name, t5.name, t5.overall_unit_name, t5.device_type, t5.unit_num, t5.dates, t5.yys, t5.l5_name, t5.l5_unit, t5.l4_name, t5.l4_unit, t5.l3_name, t5.l3_unit, t5.l2_name, t5.l2_unit, t5.l1_name, t5.l1_unit, -- 逻辑替换字段 CASE WHEN t5.l3_name = 'P电源(调拨)' THEN '数字能源产品' ELSE t5.prod_group_name END AS new_prod_group_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN 'TE' ELSE t5.prod_team_name END AS new_prod_team_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN 'POWER' ELSE t5.prod_line_name END AS new_prod_line_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN 'POWER' ELSE t5.prod_class_check_name END AS new_prod_class_check_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN '电源' ELSE t5.l1_name END AS new_l1_name, CASE WHEN t5.l3_name = 'P电源(调拨)' THEN 'PAD电源' ELSE t5.l2_name END AS new_l2_name FROM hive.dw.dm_plan_shipping_statistics_11 t5 -- ← 关键:必须加 catalog.schema WHERE t5.l3_name = 'P电源(调拨)'; ``` > ⚠️ 注意:`hive.dw.` 是示例,请根据你实际环境调整! --- ## 🧭 如何确认正确的 catalog 和 schema? 运行以下命令查看元数据: ### 1. 查看所有 catalog ```sql SHOW CATALOGS; ``` 输出可能包含: ``` hive iceberg mysql system ``` ### 2. 查看某个 catalog 下的所有 schema ```sql SHOW SCHEMAS FROM hive; ``` 输出类似: ``` default ods dwd dw dm tmp ``` ### 3. 查找表是否存在 ```sql -- 模糊搜索 SHOW TABLES FROM hive.dw LIKE '%shipping%'; -- 或精确查 SHOW TABLES FROM hive.dw; ``` ### 4. 描述表结构(验证字段是否存在) ```sql DESCRIBE hive.dw.dm_plan_shipping_statistics_11; ``` 如果返回正常字段列表,则说明路径正确。 --- ## 💡 常见部署结构参考(企业常用) | 表类型 | 推荐路径格式 | |--------|---------------| | ODS 层 | `hive.ods.表名` | | DWD 层 | `hive.dwd.表名` | | DW/DWS 层 | `hive.dw.表名` 或 `hive.dws.表名` | | DM/ADS 层 | `hive.dm.表名` | | 临时表 | `memory.tmp.表名` 或 `hive.tmp.表名` | --- ## ✅ 总结:你现在遇到的问题分两层 | 阶段 | 错误 | 已解决? | 方法 | |------|------|--------|-------| | 第一次 | `CASE` 语法错误 + 别名带点 | ✅ 已修 | 改成合法别名,修正逻辑 | | 第二次 | 字段无法解析 | ❌ 当前问题 | 加上完整 `catalog.schema.table` 路径 | --- ## ✅ 最佳实践建议 1. **永远使用全限定名查询表** ```sql SELECT * FROM hive.dw.my_table; ``` 不要依赖默认 schema(尤其在调度系统中会失效) 2. **开发时用 `DESCRIBE` 验证表存在** 3. **上线前检查所有表是否加了前缀** 4. **避免使用中文条件直接匹配,可用变量替代**(防止编码问题) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值