You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:在Oracle SQL Developer中编写统计指定字符串单词数的存储过程

实现统计字符串单词数量的Oracle存储过程

没问题,我给你写一个实用的Oracle存储过程,专门用来统计给定字符串里的单词数量,还考虑了常见的边界情况(比如首尾空格、连续空格)。

存储过程代码

CREATE OR REPLACE PROCEDURE COUNT_WORDS(
    P_INPUT_STRING IN VARCHAR2,
    P_WORD_COUNT OUT NUMBER
) AS
    V_CLEANED_STRING VARCHAR2(4000); -- 可根据实际需求调整字符串长度上限
BEGIN
    -- 第一步:清理字符串——去除首尾空白,同时把连续的多个空白替换成单个空格
    V_CLEANED_STRING := TRIM(REGEXP_REPLACE(P_INPUT_STRING, '\s+', ' '));
    
    -- 第二步:判断清理后的字符串是否为空,为空则单词数为0
    IF V_CLEANED_STRING IS NULL OR V_CLEANED_STRING = '' THEN
        P_WORD_COUNT := 0;
    ELSE
        -- 第三步:统计非空格连续字符的出现次数,也就是单词的数量
        P_WORD_COUNT := REGEXP_COUNT(V_CLEANED_STRING, '[^ ]+');
    END IF;
    
EXCEPTION
    WHEN OTHERS THEN
        -- 异常兜底:出现错误时返回0并打印错误信息,可根据需求调整
        P_WORD_COUNT := 0;
        DBMS_OUTPUT.PUT_LINE('Error occurred: ' || SQLERRM);
END COUNT_WORDS;
/

代码细节说明

  • TRIM(REGEXP_REPLACE(...)):先把所有连续空白(空格、制表符等,\s匹配所有空白类型)压缩成单个空格,再去掉首尾空格,避免多余空格干扰统计结果。
  • REGEXP_COUNT(V_CLEANED_STRING, '[^ ]+'):通过正则匹配“非空格的连续字符”,统计匹配次数就是单词的数量,逻辑简单高效。
  • 异常处理:简单捕获所有异常并返回0,你可以根据实际业务需求(比如记录日志、抛出特定错误)修改这部分逻辑。

在SQL Developer里的调用示例

你可以用以下两种方式测试这个存储过程:

方式1:匿名块调用(适合快速验证)

DECLARE
    V_RESULT NUMBER;
BEGIN
    COUNT_WORDS('   Hello world!  This is a test string.   ', V_RESULT);
    DBMS_OUTPUT.PUT_LINE('Word count: ' || V_RESULT);
END;
/

执行后,在SQL Developer的「输出」窗口会看到结果:Word count: 7

方式2:绑定变量调用(适合脚本复用)

VAR v_count NUMBER;
EXEC COUNT_WORDS('Just one single word', :v_count);
PRINT v_count;

自定义调整建议

  • 如果你的单词分隔符不只是空格(比如包含逗号、分号、制表符),可以把正则表达式里的\s+改成[\s,\t;]+,把[^ ]+改成[^,\t; ]+,就能支持多种分隔符了。
  • 如果输入字符串长度超过4000字符,把V_CLEANED_STRING的类型改成CLOB,同时把输入参数P_INPUT_STRING也改成CLOB即可。

内容的提问来源于stack exchange,提问作者shamayita dhara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:32:22