从 SQL 存储过程创建/更改

发布于 2024-08-16 17:27:16 字数 172 浏览 4 评论 0原文

我想从过程中调用 create table/alter table 命令。是否可以?

我的要求是更改所有表中列的数据类型。因此,我只是从 user_tab_cols 获取列名称。现在我想创建一个需要 create 语句的临时表..但我无法在过程中使用它。

有人可以帮我吗?

I want to call create table/ alter table command from a procedure. Is it possible?

My requirement is to change the datatype of a column in all tables. So, I am just getting the column name from user_tab_cols. Now I want to create a temp table which requires create statement .. but i am unable to use that within a proc.

Can anyone please help me out?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

日记撕了你也走了 2024-08-23 17:27:16

我根据对 USER_TAB_COLUMNS 的引用推测这是 Oracle。 ALTERCREATE语句是DDL,我们不能直接在PL/SQL中执行。但是,有几种方法可以解决此限制:EXECUTE IMMEDIATEDBMS_UTILITY.EXEC_DDL()。我将在下面的示例中使用EXECUTE IMMEDIATE

begin
    for lrec in ( select table_name from user_tab_columns
                  where column_name = 'UNIVERSAL_COLUMN_NAME')
    loop
        execute immediate 'alter table '||lrec.table_name||
                               ' modify UNIVERSAL_COLUMN_NAME varchar2(255)';
    end loop;
end;

请注意,通常的限制适用:新数据类型必须与现有数据类型兼容(除非列为空),并且对于某些特定数据类型(如 CLOB),事情会更加棘手。

编辑

我还没有讨论 CREATE TABLE 语句。原理是一样的,只是打字时间长一些。此外,我并不完全清楚它如何适用于您之前更改这些列的数据类型的要求。

I presume from the reference to USER_TAB_COLUMNS that this is Oracle. ALTER and CREATE statements are DDL, which we cannot execute directly in PL/SQL. However, there are a couple of ways around this restriction: EXECUTE IMMEDIATE and DBMS_UTILITY.EXEC_DDL(). I will use EXECUTE IMMEDIATE in the following example.

begin
    for lrec in ( select table_name from user_tab_columns
                  where column_name = 'UNIVERSAL_COLUMN_NAME')
    loop
        execute immediate 'alter table '||lrec.table_name||
                               ' modify UNIVERSAL_COLUMN_NAME varchar2(255)';
    end loop;
end;

Note that the usual restrictions apply: the new datatype has to be compatible with the existing datatype (unless the column is empty), and things are trickier with some specilaized datatypes like CLOBs.

edit

I haven't addressed the CREATE TABLE statement. The principle is the same, it is just longer to type out. Besides, I am not entirely clear how it applies to your prior requirement to change the datatype of those columns.

定格我的天空 2024-08-23 17:27:16

您可以将查询生成为字符串并使用“exec”关键字执行它。

you can generate the query as string and execute it with 'exec' keyword.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文