• 金仓数据库 KingbaseES 插件参考手册 U


    105. unaccent

    105.1. 插件unaccent简介

    unaccent是一个文本搜索字典,它能从词位中移除重音(附加符号)。它是一个过滤词典,这表示它的输出总是会被传递给下一个字典(如果有),这和字典的通常行为不同。这允许为全文搜索做与重音无关的处理。

    unaccent的当前实现不能被用作thesaurus字典的正规化字典。

    105.2. 插件unaccent加载方式

    create extension unaccent;
    

    105.3. 插件unaccent的参数配置

    unaccent字典接受下列选项:

    * RULES是包含翻译规则列表的文件的基本名。这个文件必须被存储在$SHAREDIR/tsearch_data/(这里$SHAREDIR表示KES安装的共享数据目录)中。它的名称必须以.rules(不包含在RULES参数中)结束。

    规则文件具有下面的格式:

    * 每一行表示一个由带有重音的字符和不带重音的字符构成的对。第一个字符将被翻译成第二个。例如:

    À        A
    Ằ        A
    Ặ        A
    

    两个字符必须由空格分隔,并且一行上的任何前导或尾随空白都将被忽略。

    * 或者,如果一行只给出一个字符,则删除该字符的实例; 这在用单独的字符表示重音的语言中是有用的。

    * 实际上,每个“字符”可以是不包含空格的任何字符串,因此, 除了去除变音符之外,unaccent字典也可以用于其他类型的字符串替换

    * 规则文件必须以UTF-8编码方式存储。加载时,数据将自动转换为当前数据库的编码。 任何含有不可翻译字符的行都将被忽略,因此规则文件可以包含当前编码中不适用的规则。 在unaccent.rules中可以找到一个更完整的例子,它可以直接用于大部分欧洲语言,当unaccent模块被安装时,它被安装在$SHAREDIR/tsearch_data/中。

    105.4. 插件unaccent的使用方法

    安装unaccent扩展会创建一个文本搜索模板unaccent和一个基于前者的字典unaccent。unaccent字典有默认的参数设置RULES='unaccent',这会让该字典使用标准的unaccent.rules文件。如果希望修改该参数,可以

    alter text search dictionary unaccent (rules='my_rules');
    

    其中my_rules需要用户自行建立。

    或者基于该模板创建新的字典。

    要测试该字典,可以尝试如下方法:

    select ts_lexize('unaccent','Hộtel');
    ts_lexize
    -----------
    {Hotel}
    (1 row)
    

    这里是一个展示把unaccent字典插入到一个文本搜索配置的例子:

    create text search configuration fr ( copy = french );
    
    alter text search configuration fr
            alter mapping for hword, hword_part, word
            with unaccent, french_stem;
    
    select to_tsvector('fr','Hộtels de la Mer');
        to_tsvector
    -------------------
     'hotel':1 'mer':4
    (1 row)
    
    select to_tsvector('fr','Hộtel de la Mer') @@ to_tsquery('fr','Hotels');
     ?column?
    ----------
     t
    (1 row)
    
    select ts_headline('fr','Hộtel de la Mer',to_tsquery('fr','Hotels'));
          ts_headline
    ------------------------
     Hộtel de la Mer
    (1 row)
    

    unaccent()函数从一个给定的字符串中移除重音(附加符号)。基本上,它是unaccent字典的一个包装器,但是它能在普通的文本搜索环境之外使用。

    unaccent([dictionary regdictionary, ] string text) returns text
    

    如果省略dictionary参数,则使用名为unaccent并且与unaccent()函数有相同模式的文本搜索词典。

    例如:

    select unaccent('unaccent', 'Hộtel');
     unaccent
    -----------
     Hotel
    (1 row)
    
    
    select unaccent('Hộtel');
     unaccent
    -----------
     Hotel
    (1 row)
    

    105.5. 插件unaccent卸载方法

    drop extension unaccent;
    

    105.6. 插件unaccent升级方法

    unaccent扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。

    106. utl_file

    106.1. 插件utl_file简介

    插件utl_file补充了一些对于文件操作的函数。

    • 插件名为 utl_file

    • 插件版本 V1.0

    106.2. 插件utl_file加载方式

    在命令行执行create extension utl_file;

    示例

    create extension utl_file;
    

    106.3. 插件utl_file的参数配置

    无需配置任何参数

    106.4. 插件utl_file的使用方法

    加载插件ltree后,按照如下方式使用相应功能

    106.4.1. utl_file.fopen

    utl_file.fopen打开一个文件,返回一个文件句柄

    语法

    fopen(location text, filename text, open_mode text, max_linesize integer, encoding name) 返回integer
    fopen(location text, filename text, open_mode text, max_linesize integer) 返回integer
    

    参数

    location:指定文件的位置。

    filename:指定要打开的文件名。

    open_mode:指定文件要打开的模式。

    encoding:指定编码字符集。

    返回值

    UTL_FILE.FILE_TYPE(int类型)。 open_mode可以是'R','W','A'。utl_file.fopen为procedure。

    示例

    DROP DIRECTORY IF EXISTS MY_DIR;
    
    CREATE DIRECTORY MY_DIR AS '/tmp/'; -- 这个目录需要存在,或者人为手工创建。
    
        DROP PROCEDURE IF EXISTS TEST_FOPEN;
    
        \set SQLTERM /
    
    CREATE OR REPLACE PROCEDURE TEST_FOPEN(
            V_OUT_DATA IN VARCHAR2,
            V_SQLPARAM IN VARCHAR2
    ) AS
    DECLARE
            OUT_DATA VARCHAR2(30000);
            FILE_HANDLE UTL_FILE.FILE_TYPE;
            FILD_NAME VARCHAR2(1000) DEFAULT 'output.txt';
    BEGIN
            OUT_DATA := V_OUT_DATA;
            FILE_HANDLE := UTL_FILE.FOPEN('MY_DIR', FILD_NAME, 'A', 30000);
            UTL_FILE.PUT_LINE(FILE_HANDLE, OUT_DATA);
            UTL_FILE.PUT_LINE(FILE_HANDLE, V_SQLPARAM);
            UTL_FILE.FCLOSE(FILE_HANDLE);
    END TEST_FOPEN;
        /
    
        \set SQLTERM ;
    
    CALL TEST_FOPEN('111', '222'); --执行成功后可看到输入的文字。
    
        \! cat /tmp/output.txt
    

    106.4.2. utl_file.put_line

    utl_file.put_line在文件中写入一行内容

    语法

    put_line(file file_type, buffer text);
    put_line(file file_type, buffer text, autoflush bool);
    

    参数

    file:指定UTL_FILE.FILE_TYPE类型值。

    buffer:指定目标文件名。

    autoflush:指定是否自动刷新。

    返回值

    无返回值。

    注解

    utl_file.put_line为procedure。

    示例

    DROP DIRECTORY IF EXISTS MY_DIR;
    
        CREATE DIRECTORY MY_DIR AS '/tmp/'; -- 这个目录需要存在,或者人为手工创建。
    
    DROP PROCEDURE IF EXISTS TEST_FOPEN;
    
    \set SQLTERM /
    
        CREATE OR REPLACE PROCEDURE TEST_PUT_LINE(
                V_OUT_DATA IN VARCHAR2,
                V_SQLPARAM IN VARCHAR2
        )
        AS
        DECLARE
                OUT_DATA VARCHAR2(30000);
                FILE_HANDLE UTL_FILE.FILE_TYPE;
                FILD_NAME VARCHAR2(1000) DEFAULT 'output.txt';
        BEGIN
                OUT_DATA := V_OUT_DATA;
                FILE_HANDLE := UTL_FILE.FOPEN('MY_DIR', FILD_NAME, 'A', 30000);
                UTL_FILE.PUT_LINE(FILE_HANDLE, OUT_DATA);
                UTL_FILE.PUT_LINE(FILE_HANDLE, V_SQLPARAM);
                UTL_FILE.FCLOSE(FILE_HANDLE);
        END TEST_PUT_LINE;
            /
    
            \set SQLTERM ;
    
        call TEST_PUT_LINE('111', '222'); --执行成功后可看到输入的文字。
    
            \! cat /tmp/output.txt
    

    106.4.3. utl_file.put

    utl_file.put将数据强制写入到文件中

    语法

    put(file file_type, buffer text);
    

    参数

    file:指定UTL_FILE.FILE_TYPE类型值。 buffer:指定目标文件名。

    返回值

    无返回值

    注解

    utl_file.put为procedure。

    示例

    同utl_file.putline。

    106.4.4. utl_file.fclose

    utl_file.fclose关闭目标文件

    语法

    fclose(file file_type);
    

    参数

    file指定UTL_FILE.FILE_TYPE类型值。

    返回值

    无返回值。

    返回值

    utl_file.fclose为procedure。

    示例

        \set SQLTERM /
    
    CREATE or replace PROCEDURE proc1()
    as
    DECLARE
            dirname                  VARCHAR(100) DEFAULT 'my_dir';
            v_empfile_src    UTL_FILE.FILE_TYPE;
            v_empfile_tgt    UTL_FILE.FILE_TYPE;
            v_src_file       VARCHAR(20) DEFAULT 'output.txt';
            v_dest_file      VARCHAR(20) DEFAULT 'test.txt';
            v_empline        VARCHAR(200);
    begin
            v_empfile_src = UTL_FILE.FOPEN(dirname,v_src_file,'r');
            v_empfile_tgt = UTL_FILE.FOPEN(dirname,v_dest_file,'w');
      LOOP
             BEGIN
             UTL_FILE.GET_LINE(v_empfile_src,v_empline);
             UTL_FILE.PUT(v_empfile_tgt,v_empline);
             UTL_FILE.NEW_LINE(v_empfile_tgt);
             UTL_FILE.FFLUSH(v_empfile_tgt);
             EXCEPTION
              WHEN OTHERS THEN
                    EXIT;
             END;
      END LOOP;
      DBMS_OUTPUT.PUT_LINE('Updated file: ' || v_dest_file);
      UTL_FILE.FCLOSE(v_empfile_tgt);
      UTL_FILE.FCLOSE(v_empfile_src);
    END proc1;
        /
    
        \set SQLTERM ;
    

    106.4.5. utl_file.fclose_all

    utl_file.fclose_all关闭所有文件

    语法

    utl_file.fclose_all();
    

    参数

    无参数

    返回值

    无返回值。

    注解

    utl_file.fclose_all为procedure。

    示例

        \set SQLTERM /
    
    CREATE OR REPLACE FUNCTION read_file(dir text) RETURNS void AS $$
    DECLARE
      f utl_file.file_type;
    BEGIN
      f := utl_file.fopen(dir, 'regress_orafce.txt', 'r');
      FOR i IN 1..11 LOOP
            RAISE NOTICE '[%] >>%<<', i, utl_file.get_line(f);
      END LOOP;
      RAISE NOTICE '>>%<<', utl_file.get_line(f, 4);
      RAISE NOTICE '>>%<<', utl_file.get_line(f, 4);
      RAISE NOTICE '>>%<<', utl_file.get_line(f);
      RAISE NOTICE '>>%<<', utl_file.get_line(f);
      EXCEPTION
            -- WHEN no_data_found THEN,  8.1 plpgsql doesn't know no_data_found
            WHEN others THEN
              RAISE NOTICE 'finish % ', sqlerrm;
              RAISE NOTICE 'is_open = %', utl_file.is_open(f);
              PERFORM utl_file.fclose_all();
              RAISE NOTICE 'is_open = %', utl_file.is_open(f);
      END;
    $$ LANGUAGE plpgsql;
        /
    
        \set SQLTERM ;
    

    106.4.6. utl_file.get_line

    utl_file.get_line返回文件的一行。

    语法

    get_line(file integer, OUT buffer text);
    get_line(file integer, OUT buffer text, len integer);
    

    参数

    file:指定UTL_FILE.FILE_TYPE类型值。

    buffer:指定输出的文件。

    len:指定想要输出的特定行。

    返回值

    无返回值。

    注解

    utl_file.get_line为procedure。

    示例

        \set SQLTERM /
    
    CREATE OR REPLACE PROCEDURE TEST_GET_LINE as
            vInHandle UTL_FILE.FILE_TYPE;
            vNewLine  VARCHAR2(250);
    BEGIN
      vInHandle = utl_file.fopen('MY_DIR', 'test.txt','R');
      utl_file.get_line(vInHandle, vNewLine);
      RAISE NOTICE '>>%<<', vNewLine;
      utl_file.fclose(vInHandle);
    END TEST_GET_LINE;
        /
    
        \set SQLTERM ;
    

    106.4.7. utl_file.new_line

    utl_file.new_line为文本增加行终止符。

    语法

    new_line(file integer);
    new_line(file integer, lines int);
    

    参数

    file:指定UTL_FILE.FILE_TYPE类型值。

    lines:指定需要操作的行数。

    返回值

    无返回值。

    注解

    utl_file.new_line为procedure。

    示例

        \set SQLTERM /
    
    CREATE DIRECTORY MY_DIR AS '/tmp/';
    declare
            vInHandle utl_file.file_type;
    begin
            vInHandle := utl_file.fopen('MY_DIR', 'output.txt', 'w');
            utl_file.new_line(vInHandle, 2);
            utl_file.fclose(vInHandle);
    end;
        /
    
        \set SQLTERM ;
    

    106.4.8. utl_file.fflush

    utl_file.fflush清空目标文件。

    语法

    fflush(file integer);
    

    参数

    file指定UTL_FILE.FILE_TYPE类型值。

    返回值

    无返回值。

    注解

    utl_file.fflush为procedure。

    示例

        \set SQLTERM /
    
    CREATE or replace PROCEDURE proc1()
    as
      DECLARE
            dirname                  VARCHAR(100) DEFAULT 'my_dir';
            v_empfile_src    UTL_FILE.FILE_TYPE;
            v_empfile_tgt    UTL_FILE.FILE_TYPE;
            v_src_file       VARCHAR(20) DEFAULT 'output.txt';
            v_dest_file      VARCHAR(20) DEFAULT 'test.txt';
            v_empline        VARCHAR(200);
    begin
            v_empfile_src = UTL_FILE.FOPEN(dirname,v_src_file,'r');
            v_empfile_tgt = UTL_FILE.FOPEN(dirname,v_dest_file,'w');
      LOOP
             BEGIN
             UTL_FILE.GET_LINE(v_empfile_src,v_empline);
             UTL_FILE.PUT(v_empfile_tgt,v_empline);
             UTL_FILE.NEW_LINE(v_empfile_tgt);
             UTL_FILE.FFLUSH(v_empfile_tgt);
             EXCEPTION
              WHEN OTHERS THEN
                    EXIT;
             END;
      END LOOP;
      DBMS_OUTPUT.PUT_LINE('Updated file: ' || v_dest_file);
      UTL_FILE.FCLOSE(v_empfile_tgt);
      UTL_FILE.FCLOSE(v_empfile_src);
    END proc1;
        /
    
        \set SQLTERM ;
    

    106.5. 插件utl_file卸载方法

    卸载时drop extension utl_file即可。

    示例

    drop extension utl_file;
    

    106.6. 插件utl_file升级方法

    utl_file扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。

    107. uuid-ossp

    107.1. 插件uuid-ossp简介

    插件uuid-ossp是uuid生成工具。

    • 插件名为 uuid-ossp

    • 插件版本 V1.0

    107.2. 插件uuid-ossp加载方式

    使用时需要在命令行执行create extension "uuid-ossp";

    示例:

    create extension "uuid-ossp";
    

    107.3. 插件uuid-ossp的参数配置

    无需配置任何参数。

    107.4. 插件uuid-ossp的使用方法

    加载插件uuid-ossp后,用uuid_generate_v1()或uuid_generate_v4()函数生成UUID值。 uuid_generate_v1()与计算机的MAC地址和时间戳有关。 uuid_generate_v4()生成随机的uuid。

    示例:

    select uuid_generate_v1();
                uuid_generate_v1
    --------------------------------------
    c12bedf0-d7b4-11ec-8340-20040feac55c
    (1 行记录)
    
    select uuid_generate_v4();
                uuid_generate_v4
    --------------------------------------
    83e19b37-8195-4823-a6b7-82a1ed5cc668
    (1 行记录)
    

    107.5. 插件uuid-ossp卸载方法

    卸载时drop extension uuid-ossp即可。

    示例:

    drop extension "uuid-ossp";
    

    107.6. 插件uuid-ossp升级方法

    uuid-ossp扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。

  • 相关阅读:
    长短期记忆网络(LSTM)原理解析
    【技术分享】使用nginx完成动静分离➕集成SpringSession➕集成sentinel➕集成seata
    MATLAB字符串
    微服务-微服务Nacos配置中心
    Oracle(54)什么是本地索引(Local Index)?
    Jenkins cron定时构建触发器
    1.0零基础尝试DCM通讯(c-store)
    黑客零基础入门教程及方法,从零开始学习黑客技术,看这一篇就够了
    goctp 委托追单
    竞赛选题 深度学习 python opencv 实现人脸年龄性别识别
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/126646727