sql - 带有函数返回 VARCHAR2 的 WITH 子句
问题描述
我需要使用 WITH 子句中的函数编写 SQL 查询。
`
WITH
FUNCTION with_function(p_id IN NUMBER) RETURN VARCHAR2 IS
l_pid VARCHAR2(38);
BEGIN
SELECT TO_CHAR(p_id) INTO l_pid FROM dual;
RETURN l_pid;
END;
SELECT with_function(2.23327463784638764)
FROM DUAL;
`
传递给的值的长度with_function
可以变化。因此,当长度大于 38l_pid VARCHAR2(38);
时将不起作用。我可以在声明它时给出最大长度(32767),或者我可以使用没有参数的过程,但我想知道是否有任何其他方法可以不对长度进行硬编码在 WITH 子句中使用函数时。p_id
p_id
解决方案
NUMBER [ (p [, s]) ]
具有精度
p
和规模的数字s
。精度p
范围可以从 1 到 38。s
小数位数范围可以从 -84 到 127。精度和小数位数都是十进制数字。一个NUMBER
值需要 1 到 22 个字节。
因此,您需要的最大长度为 40 个字符(带小数点和负号),因为任何大于该长度的精度在存储为 时都会丢失NUMBER
:
WITH
FUNCTION with_function(p_id IN NUMBER) RETURN VARCHAR2 IS
l_pid VARCHAR2(40);
BEGIN
SELECT TO_CHAR(p_id) INTO l_pid FROM dual;
RETURN l_pid;
END;
data ( value ) AS (
SELECT 1234567898012345678980123456789801234567898012345678980 FROM DUAL UNION ALL
SELECT 1234567898012345678980.123456789801234567898012345678980 FROM DUAL UNION ALL
SELECT 0.1234567898012345678980123456789801234567898012345678980 FROM DUAL UNION ALL
SELECT -1234567898012345678980123456789801234567898012345678980 FROM DUAL UNION ALL
SELECT -1234567898012345678980.123456789801234567898012345678980 FROM DUAL UNION ALL
SELECT -0.1234567898012345678980123456789801234567898012345678980 FROM DUAL
)
SELECT with_function(value)
FROM data;
输出:
WITH_FUNCTION(值) 1.2345678980123456789801234567898012E+54 1234567898012345678980.12345678980123457 .123456789801234567898012345678980123457 -1.234567898012345678980123456789801E+54 -1234567898012345678980.1234567898012346 -.12345678980123456789801234567898012346
db<>在这里摆弄
推荐阅读
- c++ - 具有自己的类和 std::string_view 的“operator==”的模棱两可的重载
- android - 如何在前台服务(Oreo、Pie、Android 10)中使用 Location (android.gms.location.*)
- jmeter - jMeter中的倒计时
- azure - Azure WebApp 中的 IP 保护特定路径/url
- c# - RabbitMQ 消费者跳过 Received 事件并且没有收到消息
- visual-studio - 删除未使用的图像后损坏的 Resources.resx
- python - 将 sql 文本文件加载到变量中并通过 pymysql 提交插入/更新查询会产生警告-可以忽略吗?
- mysql - 如何删除表中的记录,该表中的主键在另一个表中作为外键引用?
- javascript - 从数据库中获取新的事件参数 fullcalendar
- html - 为什么我的标题元素文本没有按预期居中?