在 oracle sql developer 4.1.3.20 中声明和使用字符串变量
declare and use a string variable in oracle sql developer 4.1.3.20
所以在工作中,我们最近一直在使用 Oracle SQL Developer 4.1.3.20 来查询我们的数据,所以我编写了这段代码(它实际上长了 8 左右 table加入):
select
s.NAME as "Shipment ID"
,k.STATUS_ID as "Status"
,u.SCR_NO as "SPID"
from xyz.DRUG_KIT k
left join xyz.DR_SHIP s on s.ID = k.SHIPMENT_ID
left join xyz.USR_PAT u on u.PAT_ID = k.PAT_ID
当我不得不切换到另一个数据库中的另一个 table 时,我一直在上面你看到 'xyz' 的地方复制粘贴,但肯定有更好的方法吗?我曾经使用 SQL Server Management Studio 2014,但一旦我们开始使用 Oracle 数据库,我们就不得不切换到这个。我如何在 Oracle SQL Developer 中声明一个 varchar(?) 变量,这样我就可以只使用那个变量代替 XYZ,在查询的顶部,我可以在一个地方将该变量设置为等于任何必要的地方,如果那讲得通。当我尝试将大约 10 多个 table 连接在一起以检索数据时,当我在一行上复制粘贴错误内容时,它变得很麻烦。
在数据库级别,您可能需要 public 同义词。 https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7001.htm
XYZ 是 table 的所有者,而不是其他数据库。如果您以用户 XYZ 身份连接,那么您不需要在 table 名称前加上 XYZ 前缀,只有在您尝试访问属于不同 "SCHEMA".[=16= 的对象时才需要这样做]
您可以通过发出 alter session 命令更改会话的当前 "parsing" 模式:
ALTER SESSION SET CURRENT_SCHEMA=PDQ;
然后 select 来自用户 PDQ 授予您 select 权限的对象:
select
s.NAME as "Shipment ID"
,k.STATUS_ID as "Status"
,u.SCR_NO as "SPID"
from DRUG_KIT k
left join DR_SHIP s on s.ID = k.SHIPMENT_ID
left join USR_PAT u on u.PAT_ID = k.PAT_ID;
然后您可以将架构改回 XYZ 并执行相同的 select 语句,并根据 XYZ 拥有的 table 的内容获得不同的结果:
ALTER SESSION SET CURRENT_SCHEMA=XYZ;
select
s.NAME as "Shipment ID"
,k.STATUS_ID as "Status"
,u.SCR_NO as "SPID"
from DRUG_KIT k
left join DR_SHIP s on s.ID = k.SHIPMENT_ID
left join USR_PAT u on u.PAT_ID = k.PAT_ID;
为了使 PDQ 拥有的 DR_SHIP table 可以从 XYZ 架构访问,可以创建 PDQ.DR_SIP 的私有同义词来代替 table onwed XYZ:
CREATE OR REPLACE SYNONYM DR_SHIP FOR PDQ.DR_SHIP;
另一方面,如果您希望 PDQ 版本的 DRUG_KIT table 可从数据库中的所有 SCHEMA 访问,您可以创建一个 public 同义词:
CREATE OR REPLACE PUBLIC SYNONYM DRUG_KIT FOR PDQ.DRUG_KIT;
如果上面的none满足你的需求,你可以使用SQL*加上样式替换变量:
ACCEPT user;
select
s.NAME as "Shipment ID"
,k.STATUS_ID as "Status"
,u.SCR_NO as "SPID"
from &user..DRUG_KIT k
left join &user..DR_SHIP s on s.ID = k.SHIPMENT_ID
left join &user..USR_PAT u on u.PAT_ID = k.PAT_ID;
但您需要了解,这些在 SQL*Plus、SQL 开发人员、SQLcl 以及可能的其他几个 SQL 开发环境。
所以在工作中,我们最近一直在使用 Oracle SQL Developer 4.1.3.20 来查询我们的数据,所以我编写了这段代码(它实际上长了 8 左右 table加入):
select
s.NAME as "Shipment ID"
,k.STATUS_ID as "Status"
,u.SCR_NO as "SPID"
from xyz.DRUG_KIT k
left join xyz.DR_SHIP s on s.ID = k.SHIPMENT_ID
left join xyz.USR_PAT u on u.PAT_ID = k.PAT_ID
当我不得不切换到另一个数据库中的另一个 table 时,我一直在上面你看到 'xyz' 的地方复制粘贴,但肯定有更好的方法吗?我曾经使用 SQL Server Management Studio 2014,但一旦我们开始使用 Oracle 数据库,我们就不得不切换到这个。我如何在 Oracle SQL Developer 中声明一个 varchar(?) 变量,这样我就可以只使用那个变量代替 XYZ,在查询的顶部,我可以在一个地方将该变量设置为等于任何必要的地方,如果那讲得通。当我尝试将大约 10 多个 table 连接在一起以检索数据时,当我在一行上复制粘贴错误内容时,它变得很麻烦。
在数据库级别,您可能需要 public 同义词。 https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7001.htm
XYZ 是 table 的所有者,而不是其他数据库。如果您以用户 XYZ 身份连接,那么您不需要在 table 名称前加上 XYZ 前缀,只有在您尝试访问属于不同 "SCHEMA".[=16= 的对象时才需要这样做]
您可以通过发出 alter session 命令更改会话的当前 "parsing" 模式:
ALTER SESSION SET CURRENT_SCHEMA=PDQ;
然后 select 来自用户 PDQ 授予您 select 权限的对象:
select
s.NAME as "Shipment ID"
,k.STATUS_ID as "Status"
,u.SCR_NO as "SPID"
from DRUG_KIT k
left join DR_SHIP s on s.ID = k.SHIPMENT_ID
left join USR_PAT u on u.PAT_ID = k.PAT_ID;
然后您可以将架构改回 XYZ 并执行相同的 select 语句,并根据 XYZ 拥有的 table 的内容获得不同的结果:
ALTER SESSION SET CURRENT_SCHEMA=XYZ;
select
s.NAME as "Shipment ID"
,k.STATUS_ID as "Status"
,u.SCR_NO as "SPID"
from DRUG_KIT k
left join DR_SHIP s on s.ID = k.SHIPMENT_ID
left join USR_PAT u on u.PAT_ID = k.PAT_ID;
为了使 PDQ 拥有的 DR_SHIP table 可以从 XYZ 架构访问,可以创建 PDQ.DR_SIP 的私有同义词来代替 table onwed XYZ:
CREATE OR REPLACE SYNONYM DR_SHIP FOR PDQ.DR_SHIP;
另一方面,如果您希望 PDQ 版本的 DRUG_KIT table 可从数据库中的所有 SCHEMA 访问,您可以创建一个 public 同义词:
CREATE OR REPLACE PUBLIC SYNONYM DRUG_KIT FOR PDQ.DRUG_KIT;
如果上面的none满足你的需求,你可以使用SQL*加上样式替换变量:
ACCEPT user;
select
s.NAME as "Shipment ID"
,k.STATUS_ID as "Status"
,u.SCR_NO as "SPID"
from &user..DRUG_KIT k
left join &user..DR_SHIP s on s.ID = k.SHIPMENT_ID
left join &user..USR_PAT u on u.PAT_ID = k.PAT_ID;
但您需要了解,这些在 SQL*Plus、SQL 开发人员、SQLcl 以及可能的其他几个 SQL 开发环境。