NLS_NCHAR_CHARACTERSET和Oracle的NLS_CHARACTERSET之间的区别
我想知道 NLS_NCHAR_CHARACTERSET和NLS_CHARACTERSET在Oracle中设置? 根据我的理解,NLS_NCHAR_CHARACTERSET是NVARCHAR数据类型 NLS_CHARACTERSET将用于Varchar2数据类型. 我尝试在我的开发服务器上测试我的当前设置CHARACTERSET如下: PARAMETER VALUE ------------------------------ ---------------------------------------- NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET US7ASCII 然后,我将一些汉字值插入数据库中.我将字符插入一个称为data_的表中,并更新了
16 2024-03-07
编程技术问答社区
ORA-12899 尽管列的长度相同,但数值太大。
我正在运行以下查询.但是获得ORA-12899. Altough试图插入的字符串长度为30. INSERT INTO TABLE1 SELECT * FROM temp_Table1 where LENGTH(column1)=30; SQL Error: ORA-12899:value too large for column "TABLE1"."column1" (actual: 31, maximum: 30) select column1 from temp_Table1 where LENGTH(column1)=30; Testing - HLC/TC Design Corre Desc temp_Table1 column1 VARCHAR2(30) Desc Table1 column1 VARCHAR2(30) 解决方案 您正在看到 您必须为Varchar2列指定最大长度.尽管允许存储的实际字符串是零长度的字符串(''),但该最大值必须至
44 2023-11-13
编程技术问答社区
在Oracle中寻找不包含数字数据的行
我试图在非常大的Oracle表中找到一些有问题的记录.即使是VARCHAR2列,该列也应包含所有数字数据.我需要找到不包含数字数据的记录(to_number(col_name)函数时,我尝试在此列上调用它时会引发错误). 解决方案 我以为您可以使用Regexp_ike状态,并使用正则表达式找到任何非数字.我希望这可能会有所帮助吗? SELECT * FROM table_with_column_to_search WHERE REGEXP_LIKE(varchar_col_with_non_numerics, '[^0-9]+'); 其他解决方案 获得指示: DECODE( TRANSLATE(your_number,' 0123456789',' ') ,例如 SQL> select DECODE( TRANSLATE('12345zzz_not_numberee',' 0123456789',' '), NULL, 'number','contai
30 2023-11-13
编程技术问答社区
解析varchar2到表(Oracle)
oracle db 11g r2 中是否存在内置功能,可以将varchar2变量解析为表? ListAgg 或 wm_concat 对面.我发现汤姆·凯特(Tom Kyte)的方法2006年: with data as ( select trim(substr (txt, instr(txt, ',', 1, level) + 1 , instr(txt, ',', 1, level + 1) - instr(txt, ',', 1, level) - 1)) as token from (select ',' || :txt || ',' txt from dual) connect by level
16 2023-10-23
编程技术问答社区
用VARCHAR2代替CHAR
如何在模式中的所有表中替换CHAR? 注意:我满足于返回ALTER TABLE语句的查询,以便我可以保存脚本并再次运行. 解决方案 select 'ALTER TABLE "' || owner || '"."' || table_name || '" MODIFY ("' || column_name || '" VARCHAR2(' || data_length || '));' from all_tab_columns tc where data_type = 'CHAR' and owner = :schemaname and exists ( select 1 from all_tables t where tc.owner = t.owner and tc.table_name = t.table_name );
30 2023-10-03
编程技术问答社区
将listagg功能限制在前4000个字符
我有一个查询,它使用listagg函数将所有行作为逗号界的字符串最终运送到大文本框.我得到以下例外: ORA-01489: result of string concatenation is too long 我知道问题是要运行以汇总数据的查询返回太多行,以至于listagg正在执行的字符串串联违反了4000个字符限制.但是,对于我的用例,截断为前4000个字符是完全可以接受的. 我将如何从这里修改此示例查询. "列为最大4000个字符? SELECT LISTAGG(product_name, ', ') WITHIN GROUP( ORDER BY product_name DESC) "Product_Listing" FROM products 您不能在呼叫周围包裹substr listagg' because listagg throws the exception before substr`曾经被调用. 我已经看到了很多关于如何围绕400
54 2023-10-03
编程技术问答社区
Oracle存储过程的varchar2输入的默认大小是多少,能否改变?
我在Oracle数据库10G中有一个存储过程,其中我的输入是VARCHAR2,但是当输入字符串长时间时,我有问题要运行(不确定确切的长度可能> 8000). 我的想法是'intext varchar2'(如下)默认情况下太小.在其他情况下,我需要更长的字符串,我可能会将varchar2定义为" intext2 varchar2(32767)";我试图在下面的代码中类似地定义大小,但我的语法不正确. create or replace PROCEDURE TESTPROC ( intext IN VARCHAR2 ) AS .... Intext varchar2的(默认)大小? 可以定义这个尺寸(增加)? 谢谢 解决方案 您无法指定varchar2参数的大小. 该过程应愉快地接受最多32K的字符串(PL/SQL中VARCHAR2的最大尺寸).如果它是从SQL而不是PL/SQL调用的函数,则极限将为4K,因为SQL中VARCHAR2的最大尺寸仅为
26 2023-09-30
编程技术问答社区
Oracle和SQL Server中NVARCHAR的区别?
我们将一些数据从SQL Server迁移到Oracle.对于SQL Server中定义为NVARCHAR的列,我们开始在Oracle中创建NVARCHAR列认为它们是相似的.但是看起来它们不是. 我在Stackoverflow上阅读了几篇文章,并想确认我的发现. Oracle Varchar2已经支持Unicode,如果数据库字符集为AL32UTF8(对于我们的情况是正确的). sqlserver VARCHAR 不支持Unicode. SQLServer明确要求列在NCHAR/NVARCHAR中以将数据存储在Unicode中(特别是在2个字节UCS-2格式中). 因此,说SQL Server NVarchar列可以/应该以Oracle Varchar2列迁移是正确的吗? 解决方案 是的,如果您的Oracle数据库是使用Unicode字符集创建的,则应将SQL Server中的NVARCHAR迁移到Oracle中的A VARCHAR2.在Oracle中,存
32 2023-09-23
编程技术问答社区
当前面含有数字时,10g对varchar列进行排序
我有一个Oracle 10g db,并具有varchar2(2000个字符)列,让它命名测试,例如: : test 1test 3test 当我调用" ...订购test asc"或简单地"订购" ...通过测试订购 我得到订购的结果,例如 test 1test 3test ,但我想这样订购的结果: 1test 3test test 因此,第一个编号的插入物,是否有一种方法可以实现此目标? 解决方案 您的设置为? (select sys_context('USERENV', 'NLS_SORT') from dual).如果是BINARY,则排序顺序基于每个字符的数字值,因此它取决于数据库字符集.如果是其他东西,那么您可能要覆盖它. 您可以通过修改该参数来更改数据库或会话级别的排序顺序,但是您也可以为单个查询更改它: order by nlssort(test,'NLS_SORT=BINARY') 根据您的角色集,您可能需要使
12 2023-09-22
编程技术问答社区
如何将CLOB数据类型改为VARCHAR2(sql)?
表:客户 ID NAME DATATYPE NUMBER VARCHAR2(100) CLOB 我想将DATA列从CLOB更改为`varchar2(1000) 我已经尝试了ALTER TABLE customers MODIFY DATA VARCHAR2 (1000) ALTER TABLE customers MODIFY (DATA VARCHAR2 (1000)) 也 alter table customers modify (data VARCHAR2(4000)) 如果数据类型不是clob,那这些通常可以工作,但是我会得到ORA-22859,因为我正在使用oracle toad/apex. 解决方案 您可以尝试以下操作: 添加一个新列作为varchar2 alter table my_table add (new_column varchar2(1000)); 将clo
88 2023-09-16
编程技术问答社区
PL/SQL和SQL中VARCHAR2的最大尺寸是多少?
我在Oracle 10g上.为了要求,我需要增加PL/SQL VARCHAR2变量的大小.它的大小已经为4000.我读过 在PL/SQL中,VARCHAR2最高可达32767字节.对于SQL,极限是 4000字节 我可以增加此变量的大小而不必担心SQL限制吗? 解决方案 请参阅官方文档( httpp:htm#i54330"//docs.oracle.com/cd/b19306_01/server.102/b14200/sql_elements001.htm#i54330 ) 具有最大长度大小字节或字符的可变长度字符串.最大尺寸为4000字节或字符,最小值为1个字节或1个字符.您必须为Varchar2指定大小. 字节表明该列将具有字节长的语义; char表示该列将具有字符语义. 但在Oracle Databast 12c中也许32767( 具有最大长度大小字节或字符的可变长度字符串.您必须为Varchar2指定大小.最小尺寸为1个字节或1个字符.最大尺寸为
30 2023-09-16
编程技术问答社区
定义长度更大的VARCHAR2列的影响
当值不超过10个字节时,用VARCHAR2(1000)而不是VARCHAR2(10)定义列有什么影响? 该列仅占存储值的真正所需的空间,或者会对表空间/索引的大小/性能产生任何负面影响? 解决方案 答案取决于您是在数据库表中谈论列还是PL/SQL程序中的变量. 数据库列 所使用的存储量与存储的数据大小成比例. pl/sql变量 如果变量以1至4000(11G+)/1999(10G或更早)的尺寸声明,则将分配内存的最大长度(即Varchar2(100)将需要至少100个字节的内存. 如果将大小为4001(11G+)/2000(10G或更早)或更高的尺寸声明,则将根据存储的数据大小分配内存. (一个有趣的方面问题是,如果变量的值更改,则如何调整内存大小 - 它是否将另一个带有新大小的缓冲区重新分配?) 参考10G的参考: 小的VARCHAR2变量针对性能进行了优化,并且优化了较大的变量以有效地使用内存.截止点是2000个字节.对于2000个字节
58 2023-09-15
编程技术问答社区
Varchar2和char之间的主要区别是什么?
创建表: CREATE TABLE test ( charcol CHAR(10), varcharcol VARCHAR2(10)); SELECT LENGTH(charcol), LENGTH(varcharcol) FROM test; 结果: LENGTH(CHARCOL) LENGTH(VARCHARCOL) --------------- ------------------ 10 1 请让我知道varchar2和char之间有什么区别? 在什么时候我们都使用? 解决方案 简单示例显示差异: SELECT '"'||CAST('abc' AS VARCHAR2(10))||'"', '"'||CAST('abc' AS CHAR(10))||'"' FROM dual; '"'||CAST('ABC'ASVARCHAR2(10))||'"' '"
24 2023-09-15
编程技术问答社区
在Oracle中把Varchar2转换为Char数组
我有一个varchar2字段,想将其拆分为char阵列 像'abcdef' - >'a'b'b'c'd'e' 如何将我的现场值转换为字符数组? 解决方案 如果您实际上是指PL/SQL字符集合,则可以做 之类的事情 SQL> ed Wrote file afiedt.buf 1 declare 2 type char_arr is table of char(1) index by pls_integer; 3 l_str varchar2(100) := 'ABCDEF'; 4 l_arr char_arr; 5 begin 6 for i in 1 .. length(l_str) 7 loop 8 l_arr(i) := substr( l_str, i, 1 ); 9 end loop; 10 dbms_output.put_line( l_arr.count ); 11*
46 2023-09-08
编程技术问答社区
Oracle无法向varchar2(4000 char)列插入数据
我使用Oracle 12c.我的DB中有下面的表格. CREATE TABLE TEST_T (COL VARCHAR2(4000 CHAR)); 我需要在此表中插入多重字符.字符是3个字节字符. 我只能在表中插入1333(最多3999个字符)字符. 我的期望是最多插入1500个多重字符,但我得到 ora -01461 . 我不想将数据类型更改为clob或long. 有什么方法可以使用varchar2(4000 char)实现这一目标. 以下是代码, SET SERVEROUTPUT ON DECLARE LV_VAR CHAR(1):='プ'; -- 3 byte character LV_STR VARCHAR2(32000) := ''; BEGIN FOR I IN 1..1500 LOOP LV_STR := LV_STR||LV_VAR; END LOOP; -- INSERT INTO TEST_T VALU
52 2023-06-29
编程技术问答社区
在oracle SP中用更大的数据类型替换varchar2
我正在使用Oracle Verion 10. 使用VARCHAR2变量在PL/SQL中存储了过程. 该代码不断附加VARCHAR2变量. 当Varchar2变量大小超过32767时,它不能再增加任何值. 现在,我想将数据类型更改为Long或clob(为了适应更多字符),它不起作用. 如何在此处修改代码以具有相同的附加功能与clob或Long? 样本附加 x:= x || 'mydata'; 解决方案 long数据类型已弃用;如果可以的话,您应该认真考虑如果您正在使用clob,则可以通过32K varchar2限制这样的限制: declare l_clob clob; begin dbms_lob.createtemporary(l_clob, true); dbms_lob.open(l_clob, dbms_lob.lob_readwrite); dbms_lob.writeappend(l_clob, 4, '1234'); for i in
66 2023-06-08
编程技术问答社区
为什么oracle plsql的varchar2变量需要一个大小,而参数则不需要?
假设您有此过程: PROCEDURE f (param VARCHAR2) IS var VARCHAR2(10); BEGIN var := 'hi'; END f; 我想了解为什么var需要指定的长度,而param则不需要.我很难在Oracle文档中找到有关此信息的信息. 解决方案 " Oracle数据库从调用过程的环境中得出参数的长度,精度和比例." 请查看此相关问题. 参考: 其他解决方案 区别在于子程序标题具有正式参数,这些参数被称为实际参数 : create or replace function f( p_x in varchar2 /* a formal parameter */ ,p_y in varchar2 /* a formal parameter */ ) return varchar2 /* a formal parameter */ is begin return p_x || p_y; end
58 2023-06-08
编程技术问答社区
Oracle-如何处理变量中32K以上的字符串长度
我正在使用Oracle 11g.每当我遇到大于varchar2尺寸限制的字符串时,在SQL Server中,我都用来将数据分为多个变量,如下面的多个变量,然后在执行时加入它们.但是,Oracle似乎期望在执行之前预期32K的总尺寸.我将获得" ORA-20000:ORU-10028:线长度溢出,限制为32767字节每行"错误. 我在口头脚本中使用这些变量(不是存储的Procs).最后2个语句抛出了上述错误,我可以单独显示该值. 预先感谢. DECLARE sViewQuery varchar2(32000); sViewSelectQuery varchar2(32000); BEGIN ---Assign values of 32,000 letter string (dynamic query) sViewSelectQuery:='32K string...'; sViewQuery:='32K string..'; DBMS_O
22 2023-05-14
编程技术问答社区
实体框架和Oracle。不能插入VARCHAR2 > 1,999字符
我在Oracle表中创建了一个4,000个字符的Varchar2字段.我将使用LINQ插入字段中的字符串值与Visual Studio 2010,.NET Framework 4和 ODAC 11.2版本4和Visual Studio的Oracle开发人员工具(11.2.0.3.0).当我尝试插入大于1,999个字符的字符串值时,我会得到以下内部例外: oracle.dataaccess.client.oracleException ora -00932:不一致的数据类型:预期 - got nclob 但是,我可以在使用SQL开发人员时将4,000个字符字符串值插入字段中,而无需任何问题. 有一个已知的odac bug (无论如何,我只是想知道其他人是否遇到了此错误,如果是这样,除了找到任何解决方案之外,除了上面链接的链接的一个错误之外,它建议使用存储过程作为解决方法. Google告诉我,只有在使用XMLType字段时,人们才会遇到此错误,但是我不能是唯一一个在
16 2023-05-13
编程技术问答社区
java为oracle VARCHAR2返回空字符串值
i具有以下代码,该代码似乎正常工作,但没有显示phordercode字符串的任何值. Person_Code是Oracle 9i数据库中的VARCHAR2. 我正在使用Java SE 1.7和Ojdbc7.Jar用于我的项目.我是Java的新手,有人可以为此提供一些帮助吗? private static void GetEmployee(String input) { String output = ""; Connection con=null; PreparedStatement stmt = null; String sql ="SELECT ALL BADGE_NUMBER, PERSON_CODE FROM BADGETABLE WHERE BADGE_NUMBER = ?"; try { //load driver Class.forName("oracle.jdbc.driver.OracleDriver"); con=DriverMa
14 2023-05-13
编程技术问答社区