简体   繁体   English

从T-SQL到Oracle:复杂表列

[英]T-SQL to Oracle: Complicated Table Column

I'd like to convert the following table to PL-SQL. 我想将下表转换为PL-SQL。

CREATE TABLE [SchemaName].[TableName] (
    [value]         VARBINARY (2000) NULL,
    [valueAsString] AS               (CONVERT([nvarchar](1000),[value],0))
);

Has anyone an idea on how to recreate the valueAsString pseudo column in PL? 有谁知道如何在PL中重新创建valueAsString伪列吗?

One possible solution would be 一种可能的解决方案是

HUSQVIK@hq_pdb_tcp> CREATE OR REPLACE FUNCTION convert_raw_to_nvarchar(bin RAW) RETURN NVARCHAR2 DETERMINISTIC
  2  IS
  3  BEGIN
  4     RETURN utl_raw.cast_to_nvarchar2(bin);
  5  END;
  6  /

Function created.

HUSQVIK@hq_pdb_tcp> CREATE TABLE SchemaName.TableName (
  2      value         RAW(2000) NULL,
  3      valueAsString AS (convert_raw_to_nvarchar(value))
  4  );

Table created.

HUSQVIK@hq_pdb_tcp> insert into tablename (value) values (utl_raw.cast_to_raw(n'123344čřžžýřžý'));

1 row created.

HUSQVIK@hq_pdb_tcp> select * from tablename;

VALUE                                                        VALUEASSTRING
------------------------------------------------------------ --------------------
00310032003300330034003400630072007A007A00EC0072007A00EC     123344cržžýržý

If the limit of the binary column is 2000 bytes BLOB is not needed. 如果二进制列的限制为2000个字节,则不需要BLOB。

utl_raw.cast_to_nvarchar2 is not deterministic unfortunately so it needs to be wrapped into deterministic function to be usable in table definition. utl_raw.cast_to_nvarchar2是, utl_raw.cast_to_nvarchar2并不是确定性的,因此需要将其包装到确定性函数中以便在表定义中使用。

But I don't like such solution. 但是我不喜欢这样的解决方案。 A view can solve this without schema level function. 视图可以解决此问题而无需模式级别的功能。 Also data types suggest you store information using inappropriate data type when you want to always convert binary data into string. 另外,数据类型建议您在要始终将二进制数据转换为字符串时使用不适当的数据类型存储信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM