标签: varchar2

Oracle - 对于包含少于 4K 行的行与 Varchar 列的 CLOB 列是否有任何性能影响?

如果您需要存储大部分(如果不是全部)小于 4K 字节的字符串,那么在 VARCHAR2 数据类型上使用 CLOB 数据类型是否有任何负面影响?

这里

CLOB 可以存储在单独的 LOB 段中,指向 LOB 段的指针与表的其余数据一起存储在数据块中。如果使用 CREATE TABLE 语句,您可以使用 LOB 存储子句控制 LOB 段的存储位置。默认情况下,小于 4000 字节的 LOB 将以与 VARCHAR2 相同的方式存储,即与其余数据内联。

这里

当您创建一个带有 CLOB 列的表时,CLOB 有一个名为“启用行中存储”的选项。这决定了 CLOB 是存储在与表相同的段中,因此与表行的其余部分一起存储,还是单独存储在单独的段中。在第二种情况下,表格行将包含一个指向 CLOB 数据位置的指针。一般将CLOB与表行一起存储效率更高,但是如果CLOB超过4000个字符左右,就不能再存储在行中,不管是否启用行中存储,都存储在CLOB段中或不。

从这些语句中,在我看来,即使所有行都包含少于 4K 行,但将列声明为 CLOB 并没有任何惩罚。这是准确的吗?

oracle varchar clob varchar2

2
推荐指数
1
解决办法
3683
查看次数

Oracle 无法将数据插入 varchar2(4000 char) 列

我使用 Oracle 12c。我的数据库中有下表。

\n\n
CREATE TABLE TEST_T (COL VARCHAR2(4000 CHAR));\n
Run Code Online (Sandbox Code Playgroud)\n\n

我需要在此表中插入多字节字符。该字符是3字节字符。
\n我只能在表中插入 1333 个(最多 3999 个字节)字符。\n我的期望是插入最多 1500 个多字节字符,但我得到 ORA - 01461
\n我不想将数据类型更改为 CLOB 或 LONG。\n有没有办法使用 VARCHAR2(4000 CHAR) 来实现此目的。

\n\n

下面是代码,

\n\n
SET SERVEROUTPUT ON\nDECLARE\n  LV_VAR CHAR(1):=\'\xe3\x83\x97\';     -- 3 byte character\n  LV_STR VARCHAR2(32000) := \'\';\nBEGIN\n  FOR I IN 1..1500\n  LOOP\n    LV_STR := LV_STR||LV_VAR;\n  END LOOP;\n--\n  INSERT INTO TEST_T VALUES (LV_STR);\nEND;\n/\n\n\n\nError report -\nORA-01461: can bind a LONG value only for insert into a LONG column\nORA-06512: at line 11\n01461. 00000 - …
Run Code Online (Sandbox Code Playgroud)

oracle unicode varchar2 oracle12c

2
推荐指数
1
解决办法
1万
查看次数

Oracle字符类型

使用VARCHAR2(1 BYTE)的效率是否低于使用CHAR(1 BYTE)?

使用VARCHAR2(2000 BYTE)的效率是否低于使用CHAR(1 BYTE),如果我从未在字段中放置任何超过一个字符的值?

**通过高效,我意味着在时间(搜索)和空间(存储)方面都很有效率.

oracle types char varchar2

1
推荐指数
1
解决办法
661
查看次数

Varchar2数据类型允许systimestamp

我有一个表的varchar2数据类型,如下所示

create table t11 (aa varchar2(100),bb varchar2(100));
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试插入systimestamp上面,则会插入值:

insert into t11 values (systimestamp,systimestamp);
commit;
Run Code Online (Sandbox Code Playgroud)

问题是Oracle允许这种转换的原因.

我正在使用Oracle 11g.

oracle varchar2 oracle11g systimestamp

1
推荐指数
2
解决办法
142
查看次数

如何定义varchar2

我需要varchar2在teradata sql中添加一个数据类型的列,

例如

ALTER TABLE table_name ADD column_name varchar2 (20); 
Run Code Online (Sandbox Code Playgroud)

但是在teradata中它并没有varchar2作为一个定义的类型名称.

sql sql-server ddl varchar2

1
推荐指数
1
解决办法
351
查看次数

字符溢出Oracle 11g中的多个列?

这与以下问题有关:如何在Oracle 11g中存储无限制的字符?

如果我需要的最大值是8000个字符,我可以再添加3个varchar2列,这样我就会有4个列,每个列有2000个字符,以获得8000个字符.因此,当第一列填满时,值将溢出到下一列,依此类推.这个设计会有什么不好的副作用吗?请建议.

oracle varchar2 oracle11g

0
推荐指数
1
解决办法
261
查看次数

如何将yyyy-mm-dd hh:mi:ss转换为mm-dd-yyyy hh:mi:ss in Oracle?

我有一个varchar栏,我想转换yyyy-mm-dd hh:mi:ssmm-dd-yyyy hh:mi:ss扔在一个日期.怎么做到呢?

oracle datetime date varchar2 oracle-sqldeveloper

0
推荐指数
1
解决办法
4631
查看次数

PL/SQL:从没有循环的 select 语句生成 CSV varchar

使用 PL/SQL,我希望从 select 语句中以编程方式生成 CSV 字符串/varchar 对象。所以 select 语句的输出通常是 1-n 条记录(我只需要一列)。但关键是,我不能使用循环或任何迭代过程,而且必须在不使用外部库的情况下完成。

我可以自由地将数据转换为表格或不同的数据类型,并在需要时使用更多内存。但我不能明确使用循环。

我想我正在寻找一种方法来做这样的事情:

declare
   my_csv varchar2(4000);
begin
   select implode(my_column,',') into my_csv
   from my_table
   where some_column = 'some value';

   dbms_output.put_line('I got my list: ' || my_csv);
end;
Run Code Online (Sandbox Code Playgroud)

本质上,内理论上会像 PHP 内爆函数一样工作,而“,”逗号是我的分隔符。我可以自己定义内爆函数,但同样,我不能明确使用循环。

有任何想法吗?

csv plsql varchar2

0
推荐指数
1
解决办法
97
查看次数

Oracle - 如何区分空字符串和非空字符串?

在匿名块中,我有一个空/空的输入字符串,并且想要针对非空字符串进行检查。例子:

DECLARE 
v_notnull varchar2(50):='this string is never null';
v_input varchar2(50):='';
BEGIN
    IF trim(v_input) != trim(v_notnull) THEN
        dbms_output.put_line('the strings do NOT match');
    ELSE 
        dbms_output.put_line('the strings DO match');
    END IF; 
END;
Run Code Online (Sandbox Code Playgroud)

这里的问题是,当我运行这个块时,'the strings DO match'即使我输入''与 string 不同的空字符串(又名 null),输出也始终v_input是这样'this string is never null'。如何确保 oracle 覆盖空字符串大小写?当v_input为空时我希望输出为'the strings do NOT match'.

oracle null plsql varchar2 oracle12c

-1
推荐指数
1
解决办法
2386
查看次数