sql - SQL 选择分区中的动态值
问题描述
正如标题所说,是否可以在SELECT期间在 Paritition 中放置一个动态值?
我一直在堆栈中寻找答案,但找不到解决方案。
例子
SELECT
TB1.TB_ID,
TB1.EFF_DATE
FROM
TABLE TABLE1 PARTITION (D20191230) TB1, TABLE2 PARTITION (D20191230) TB2
WHERE
TB1.EFF_DATE >= TO_DATE(:p_req_date, 'yyyymmdd')
AND
TB1.EFF_DATE < TO_DATE(:p_req_date, 'yyyymmdd') + 1
AND
TB1.TB_ID = TB2.TB_ID
是否可以将分区值转换为
('D' + :p_req_date)
其中 :p_req_date 也将在 yyyymmdd
我已经尝试过 concat 和 subquery 但似乎没有任何点击。
任何帮助将不胜感激,谢谢!
解决方案
您可以使用动态查询。
我有一个表stu_data
,它有一个名为 的分区SYS_P389
,下面是如何使用分区的动态名称的示例execute immediate
(动态 SQL)
SQL> SET SERVEROUT ON SQL> SQL> DECLARE 2 LV_ROLL_NO STU_DATA.ROLL_NO%TYPE; 3 LV_P3898 VARCHAR2(100) := 'P3898'; 4 BEGIN 5 EXECUTE IMMEDIATE 'select max(roll_no) from stu_data partition (SYS_' 6 || LV_P3898 7 || ')' 8 INTO LV_ROLL_NO; 9 DBMS_OUTPUT.PUT_LINE('output: ' || LV_ROLL_NO); 10 END; 11 / output: 1 PL/SQL procedure successfully completed. SQL>
干杯!!
推荐阅读
- c++ - 稍微编辑后仍然有未处理的异常
- javascript - Firestore - 无法在云函数中返回集合中的所有文档(在本地工作正常)
- syntax-error - 语法错误,意外的 T_STRING PHPMAILER 第 22 行
- java - 不在 bash 中设置 CLASSPATH
- javascript - 循环遍历对象中的项目以获取 Google 表格
- excel - VBA,试图复制上一列的溢出错误
- nginx - 如何使用多个 nginx 重写标志
- .net - GC 不会释放内存,但会导致托管内存减少和非托管内存增加
- ios - 使用标签遍历对象(swift)
- javascript - 防止重复阵列设置阵列