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>
相关推荐
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_...
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_...
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语句进行详细的对比分析。这不仅有助于理解不同数据库系统之间的差异,也为开发人员提供了跨平台迁移时所需的必要知识。 ...
FUNCTION GET_FILE(P_FILE VARCHAR2, P_GET INT) RETURN VARCHAR2 IS BEGIN IF INSTR(P_FILE, '\') > 0 THEN -- windows IF P_GET = 1 THEN L_FILE := SUBSTR(P_FILE, 1, INSTR(P_FILE, '\', -1) - 1); ELSIF P...
- **VARCHAR2(length)**:存储可变长度的字符串,`length`指定了字符串的最大长度。默认长度为1,最大长度为4000字符。 - **NUMBER(p,s)**:既可用于存储浮点数,也可用于存储整数。`p`表示数字的最大位数(包括整数...
2 user_name varchar2(20), 3 old_passwd varchar2(100), 4 new_passwd varchar2(100) 5 ) 6 ; Table created. ``` 首先,创建了一个名为`passwd_changed`的表,用于记录每次密码更改的信息。接着,创建了自定义...
本文将深入解析Oracle自定义脱敏函数的实现细节,以确保在数据共享、备份或分析时不泄露关键信息。 首先,我们来看函数的定义: ```sql CREATE OR REPLACE FUNCTION F_GET_SENSITIVE(IN_STR VARCHAR, IN_TYPE ...
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 -- ...
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 ...
1. **函数定义**:定义了一个名为`GET_TYPES`的函数,接受一个`VARCHAR2`类型的参数`ccs_no`,返回`VARCHAR2`类型的结果。 2. **变量声明**: - `cols_s`:用于存储所有列的定义。 - `sqls`:用于存储最终的动态...
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中定义`varchar2`类型的列时,默认的长度单位是字节,如`varchar2(20)`表示可存储20个字节的字符串。如果想要指定字符长度,可以使用`varchar2(20 char)`。但在日常使用中,通常直接...
* varchar2数据类型:varchar2是Oracle中的一种字符串数据类型,用于存储可变长度的字符串。 * 主键约束:在创建表时,col1被指定为主键,用于唯一标识表中的每一行记录。 2. 字符串函数和操作 * INSTR函数:用于...
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(' || ...
chinese_digits VARCHAR2(10) := '零壹贰叁肆伍陆柒捌玖'; chinese_thousands VARCHAR2(4) := '万千百十个'; result VARCHAR2(50); BEGIN FOR i IN REVERSE 1..LENGTH(TO_CHAR(num)) LOOP DECLARE digit ...
- `v_varchar VARCHAR2(32767)`:用于临时存储每次循环中读取的一部分Blob数据。 - `v_start PLS_INTEGER`:初始值为1,表示从Blob数据的起始位置开始读取。 - `v_buffer PLS_INTEGER`:每次读取的数据量,默认为...
此函数接受一个`VARCHAR2`类型的参数`money`,代表需要转换的小写金额,并返回一个`VARCHAR2`类型的字符串,即转换后的大写金额。 #### 变量声明 ```sql c_money VARCHAR2(12); m_string VARCHAR2(60) := '貮参仟萬...