如何在动态PL/SQL查询中获取dd/mm/yyyy格式的日期?
动态PL/SQL查询获取dd/mm/yyyy格式出生日期的方法
你当前的代码里to_char(a.dat_of_birth)未指定格式模型,Oracle会采用会话默认的日期格式进行转换,所以无法得到目标的dd/mm/yyyy格式。只需在to_char函数中添加格式参数即可,修改后的动态SQL如下:
V_DYNAMICSQL := 'select to_char(a.dat_of_birth, ''dd/mm/yyyy'') Date_of_birth from genmst_customer a';
注意这里的单引号需要转义(用两个连续单引号),因为是在字符串中嵌套单引号。
另外,执行动态查询时需要接收返回结果:
- 若获取单条记录,可使用
INTO子句:
DECLARE V_DYNAMICSQL VARCHAR2(200); V_BIRTH_DATE VARCHAR2(10); BEGIN V_DYNAMICSQL := 'select to_char(a.dat_of_birth, ''dd/mm/yyyy'') Date_of_birth from genmst_customer a where a.customer_id = :1'; -- 假设通过ID筛选单条记录 Execute immediate v_dynamicsql INTO V_BIRTH_DATE USING 123; -- 替换为实际客户ID DBMS_OUTPUT.PUT_LINE('出生日期: ' || V_BIRTH_DATE); END; /
- 若获取多条记录,可使用
BULK COLLECT INTO批量收集到集合中:
DECLARE TYPE DATE_LIST IS TABLE OF VARCHAR2(10); V_DYNAMICSQL VARCHAR2(200); V_BIRTH_DATES DATE_LIST; BEGIN V_DYNAMICSQL := 'select to_char(a.dat_of_birth, ''dd/mm/yyyy'') Date_of_birth from genmst_customer a'; Execute immediate v_dynamicsql BULK COLLECT INTO V_BIRTH_DATES; -- 遍历输出结果 FOR i IN V_BIRTH_DATES.FIRST .. V_BIRTH_DATES.LAST LOOP DBMS_OUTPUT.PUT_LINE('第' || i || '条记录出生日期: ' || V_BIRTH_DATES(i)); END LOOP; END; /
内容的提问来源于stack exchange,提问作者Vamshikrishna Mergu
相关产品推荐
相关产品推荐

