`

Oracle varchar2 length 分析

阅读更多

Oracle varchar2 length 分析

Code 1

DECLARE
    V_OUT   VARCHAR2(32767);
BEGIN
     V_OUT := RPAD('T', 4001, 'M');
     EXECUTE IMMEDIATE 'insert into test_varchar VALUES(:1)' using V_OUT;
END;

Code 2

DECLARE
    V_OUT   VARCHAR2(32767);
BEGIN
     V_OUT := RPAD('T', 4001, 'M');
     EXECUTE IMMEDIATE 'insert into test_varchar VALUES('||chr(39)||V_OUT||chr(39)||')';
END;

这两段代码 其中 Code 1 是正确的。
Code 2 代码执行错误如下:

ORA-01704: string literal too long
ORA-06512: at line 5
01704. 00000 -  "string literal too long"
*Cause:    The string literal is longer than 4000 characters.
*Action:   Use a string literal of at most 4000 characters.
           Longer values may only be entered using bind variables.

原因分析如下:
Oracle 中‘’最大长度 4000。

CREATE TABLE test_varchar ( NAME VARCHAR2(4000) );

建表SQL中VARCHAR2 最大长度 4000。

详见:
http://www.techonthenet.com/oracle/datatypes.php
http://www.w3school.com.cn/sql/sql_syntax.asp
http://www.cnblogs.com/kerrycode/p/3833746.html

附录

CREATE TABLE test_varchar ( NAME clob );

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

分享到:
评论

相关推荐

    Oracle中实现Split函数功能

    CREATE OR REPLACE FUNCTION f_split(p_list varchar2, p_seperator varchar2) RETURN type_split PIPELINED IS l_idx PLS_INTEGER; v_list varchar2(32767) := p_list; BEGIN LOOP l_idx := instr(v_...

    Oracle9i用户加密算法

    INPUT_BUFFER_LENGTH_ERR_MSG VARCHAR2(100):='***DES INPUT BUFFER NOT A MULTIPLE OF 8 BYTES***'; begin select s1.user_pwd into L_Password from sys_users1 where s1.USER_ID = p_userid; dbms_...

    oracle汉字转拼音

    PROCEDURE 拼音截取 (p_hanzi IN VARCHAR2, p_start IN NUMBER, p_length IN NUMBER, p_sub_pinyin OUT VARCHAR2); END 汉字转拼音包; / CREATE OR REPLACE PACKAGE BODY 汉字转拼音包 AS PROCEDURE 获取全拼 (p_...

    SQL_Server,Oracle,DB2数据库SQL语句比较

    根据提供的文件信息,本文将对SQL Server、Oracle与DB2三种主流关系型数据库管理系统中的SQL语句进行详细的对比分析。这不仅有助于理解不同数据库系统之间的差异,也为开发人员提供了跨平台迁移时所需的必要知识。 ...

    Oracle实现发送邮件

    FUNCTION GET_FILE(P_FILE VARCHAR2, P_GET INT) RETURN VARCHAR2 IS BEGIN IF INSTR(P_FILE, '\') &gt; 0 THEN -- windows IF P_GET = 1 THEN L_FILE := SUBSTR(P_FILE, 1, INSTR(P_FILE, '\', -1) - 1); ELSIF P...

    Oracle经典教程2——SQL数据库操作和查询

    - **VARCHAR2(length)**:存储可变长度的字符串,`length`指定了字符串的最大长度。默认长度为1,最大长度为4000字符。 - **NUMBER(p,s)**:既可用于存储浮点数,也可用于存储整数。`p`表示数字的最大位数(包括整数...

    Oracle设置用户密码复杂度的函数

    2 user_name varchar2(20), 3 old_passwd varchar2(100), 4 new_passwd varchar2(100) 5 ) 6 ; Table created. ``` 首先,创建了一个名为`passwd_changed`的表,用于记录每次密码更改的信息。接着,创建了自定义...

    Oracle自定义脱敏函数的代码详解

    本文将深入解析Oracle自定义脱敏函数的实现细节,以确保在数据共享、备份或分析时不泄露关键信息。 首先,我们来看函数的定义: ```sql CREATE OR REPLACE FUNCTION F_GET_SENSITIVE(IN_STR VARCHAR, IN_TYPE ...

    Oracle实现身份证校验功能

    l_card_last VARCHAR2(2); l_card_str VARCHAR2(8); l_judge_str VARCHAR2(20) := '2485109736124851097'; l_judge_r NUMBER(2); l_judge_t VARCHAR2(2); l_count NUMBER(6); l_card_date DATE; BEGIN -- ...

    oracle split函数

    CREATE OR REPLACE FUNCTION fn_split(p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_str_split PIPELINED IS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2(4000); BEGIN ...

    oracle 用表结构创建 type

    1. **函数定义**:定义了一个名为`GET_TYPES`的函数,接受一个`VARCHAR2`类型的参数`ccs_no`,返回`VARCHAR2`类型的结果。 2. **变量声明**: - `cols_s`:用于存储所有列的定义。 - `sqls`:用于存储最终的动态...

    oracle汉字转拼音函数整理大全

    CREATE OR REPLACE FUNCTION fn_getpyWKG(p_str IN VARCHAR2, p_flag NUMBER DEFAULT NULL) RETURN VARCHAR2 AS v_compare VARCHAR2(4); v_return VARCHAR2(4000); v_length INT := 0; v_substr VARCHAR2(4); ...

    oracle中length、lengthb、substr、substrb函数用法介绍

    另外,值得注意的是,在Oracle中定义`varchar2`类型的列时,默认的长度单位是字节,如`varchar2(20)`表示可存储20个字节的字符串。如果想要指定字符长度,可以使用`varchar2(20 char)`。但在日常使用中,通常直接...

    oracle数据工程师面试题.pdf

    * varchar2数据类型:varchar2是Oracle中的一种字符串数据类型,用于存储可变长度的字符串。 * 主键约束:在创建表时,col1被指定为主键,用于唯一标识表中的每一行记录。 2. 字符串函数和操作 * INSTR函数:用于...

    Oracle的表结构转成Mysql的表结构

    IF (c.data_type = 'VARCHAR2' OR c.data_type = 'NVARCHAR2') THEN data_type := 'VARCHAR(' || c.data_length || ')'; ELSIF (c.data_type = 'CHAR' OR c.data_type = 'NCHAR') THEN data_type := 'CHAR(' || ...

    Oracle中金额大小写转换

    chinese_digits VARCHAR2(10) := '零壹贰叁肆伍陆柒捌玖'; chinese_thousands VARCHAR2(4) := '万千百十个'; result VARCHAR2(50); BEGIN FOR i IN REVERSE 1..LENGTH(TO_CHAR(num)) LOOP DECLARE digit ...

    oracle Blob转换Clob

    - `v_varchar VARCHAR2(32767)`:用于临时存储每次循环中读取的一部分Blob数据。 - `v_start PLS_INTEGER`:初始值为1,表示从Blob数据的起始位置开始读取。 - `v_buffer PLS_INTEGER`:每次读取的数据量,默认为...

    oracle中将小写金额转换为大写金额函数

    此函数接受一个`VARCHAR2`类型的参数`money`,代表需要转换的小写金额,并返回一个`VARCHAR2`类型的字符串,即转换后的大写金额。 #### 变量声明 ```sql c_money VARCHAR2(12); m_string VARCHAR2(60) := '貮参仟萬...

Global site tag (gtag.js) - Google Analytics