如何将oracle表中的字段由integer 转变为varchar2(50)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将oracle表中的字段由integer 转变为varchar2(50)相关的知识,希望对你有一定的参考价值。

原本表是从SQL中导入到ORACLE 中的,其中有个字段在SQL中是自动增长列,字段类型为integer ,现在在ORACLE中想把这个字段转换为varchar2(50)

参考技术A 由于integer和varchar2是不兼容的数据类型,不能直接修改字段类型,可采取如下步骤:
1、如果导入到oracle中的表名是使用中的,先将其改名(用rename)。
2、导出原表的创建脚本,修改自动增长字段的类型为varchar2(50)。
3、用sql语句把原表(重命名后的表)的数据插入到新建的表中,原来是integer类型的字段用to_char转换一下就可以了。
参考技术B 转换为Varchar用:to_char
转换为numBer用:To_number
还有:To_date本回答被提问者和网友采纳
参考技术C 你是如何导入的?是在程序里面导入,还是用sqlserver导出文本再导入到oracle中?

当嵌套表属于记录类型时,如何将数据填充到 Oracle 中的嵌套表中

【中文标题】当嵌套表属于记录类型时,如何将数据填充到 Oracle 中的嵌套表中【英文标题】:How to populate data into a nested table in Oracle when the nested table is within a record type 【发布时间】:2013-08-02 12:42:31 【问题描述】:

我需要能够从一个过程以游标变量的形式返回一个值列表。但在列表中,一些字段可以有多个值

例如一个产品的描述字段中可以有多个描述行(从不同的表中获取)。

我正在考虑在记录类型中创建一个嵌套表并将其与游标相关联。

TYPE N_TYPE IS TABLE OF VARCHAR2(350);
TYPE TYPE1 IS RECORD ( FIELD_1 VARCHAR2(100)
                      , FIELD_2 VARCHAR2(30)
                      , FIELD_3 N_TYPE);

TYPE T_CUR IS REF CURSOR RETURN TYPE1;

Procedure p_proc (p_1 IN VARCHAR2, p_2 OUT t_cur) is
  -- processing input parameter and passing out a cursor to host application
end p_proc;

在此过程中,我需要将p_1 传递到表中,并使用显式游标将数据检索到Field_1Field_2

然后我需要从另一个表中将多条记录分配给Field_3

当表是记录中数据类型的一部分时,谁能告诉我如何将数据填充到嵌套表中?以及如何在填充后进行检查。以及如何将其分配给 out 参数的游标变量?

【问题讨论】:

【参考方案1】:

本文档:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#CIHIEBJC 描述了如何在 PL/SQL 中使用集合类型: 基本示例:

DECLARE
   TYPE N_TYPE IS TABLE OF VARCHAR2(350);
   TYPE TYPE1 IS RECORD ( FIELD_1 VARCHAR2(100)
                      , FIELD_2 VARCHAR2(30)
                      , FIELD_3 N_TYPE);
   v_n n_type;
   v_type1 type1;
BEGIN
   v_n := n_type(); -- initialize an empty collection
   v_n.extend( 3 ); -- add 3 elements to the table
   v_n( 1 ) := 'First string ';
   v_n( 2 ) := 'Second string ';
   v_n( 3 ) := 'Third string ';
   v_n.extend; -- add 1 element at the end of the table
   v_n( v_n.last ) := 'Next string';

   --assign the table to the field_3 of the record
   v_type1.field_3 := v_n;

   -- check values
   FOR i in v_type1.field_3.first .. v_type1.field_3.last LOOP
      DBMS_OUTPUT.PUT_LINE(  v_type1.field_3( i ) );
   END LOOP;
END;
/

--- DBMS_OUTPUT -------
First string 
Second string 
Third string 
Next string

【讨论】:

感谢您的帮助。我希望能够在主机应用程序中处理记录集 v_type1。如果记录集要从表函数返回,是否可以操作 field_3 中的单个数据项?此外,如果主机应用程序要处理游标变量,是否可以将 v_type1 作为游标变量返回?如果是这样,那么如何再次操作 field_3 中的各个项目?

以上是关于如何将oracle表中的字段由integer 转变为varchar2(50)的主要内容,如果未能解决你的问题,请参考以下文章

当嵌套表属于记录类型时,如何将数据填充到 Oracle 中的嵌套表中

用oracle如何查询出一个表中的一个字段内容包含另一个表中的某个字段的值呢

如何根据oracle中另一个表中的值更新一个表中的字段[重复]

如何把excel中的数据导入到oracle数据已有的表中,excel中的数据和表中的数据字段都是对应的

Oracle创建索引SQL简单的例子,在表中的指定字段和如何使用索引呢?

Oracle创建索引SQL简单的例子,在表中的指定字段和如何使用索引呢?