【问题标题】:oracle - concatenate in select for drop, create, grant - lost in ''''oracle - 在选择中连接删除、创建、授予 - 在“”中丢失
【发布时间】:2019-08-08 03:43:36
【问题描述】:

我是 Oracle 数据库的新手,有一个任务要编写几个选择,但我不知道它是如何工作的(或者更好地说是不工作)。你能帮我找出一个错误吗?可能你有一个链接到一些信息或转换器来帮助这些写作。

v_sql := 'SELECT ''DROP TABLE ''||object_name||'' as
            select *  
            FROM all_objects
            WHERE object_name LIKE '''%''|| v_date ||''%'''
            and object_type = ''TABLE''
            and owner =''||v_owner||'''; 

【问题讨论】:

  • 我觉得你的评论很傲慢。这不是我的业务逻辑。我正在尝试实现连接并失败。这不是用-2分标记我的用户问题和答案的理由。当你从历史转行时(正如你的个人资料中所写的那样),当我刚从生物学转行时,我相信你并没有变得更好。不举个例子怎么问?

标签: sql oracle plsql concatenation


【解决方案1】:

您是否尝试为特定用户生成DROP 语句?从下面的匿名块开始并添加到它。

--Generate DROP statements for all tables for a user.
declare
    v_owner varchar2(128) := user;
begin
    for objects in
    (
        select distinct 'DROP TABLE "'||owner||'"."'||object_name||'"' v_sql
        from all_objects
        where object_type = 'TABLE'
            and owner = v_owner
        order by v_sql
    ) loop
        dbms_output.put_line(objects.v_sql);
    end loop;
end;
/

【讨论】:

  • 声明 v_owner varchar2(130) := 'ORA1'; v_date varchar2(130) := 'LOYEE';从 (select distinct 'DROP TABLE '||owner||'.'||object_name||'' v_sql from all_objects where object_type = 'TABLE' and object_name LIKE 'EMP'||v_date||'' and owner = v_owner order by v_sql ) loop dbms_output.put_line(objects.v_sql);结束循环;结尾; /
  • 我的代码格式和你不一样?
  • @Viola_M 我不确定问题出在哪里。它可能在LIKE 'EMP' 部分附近,应该有一个% 通配符。部分问题在于您的陈述正在做三件不同的事情,并且一次做所有事情很容易混淆。把问题分成三个部分。首先,构建一个返回相关表的查询。不要使用变量,对所有内容进行硬编码。其次,将查询转换为生成DROP 语句的查询。最后,将该查询放入 PL/SQL 块中以迭代结果,并使用变量而不是硬编码。
  • 乔恩,为什么你的代码中有''围绕这些词?有必要吗?或者我可以省略这个''。查看我得到的输出: DROP TABLE "ORA1"."LOCATIONS" DROP TABLE "ORA1"."MY_EMPLOYEE" DROP TABLE "ORA1"."REGIONS"
  • @Viola_M 仅当您的架构包含区分大小写的表名时才需要。这不太可能,但以防万一它可能值得提前编码。如果您确定代码不会用于区分大小写的名称,那么可以排除引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2019-04-13
  • 2014-01-02
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
相关资源
最近更新 更多