gpt4 book ai didi

sql - 在 .sql 脚本中定义和使用变量

转载 作者:行者123 更新时间:2023-12-02 22:08:55 26 4
gpt4 key购买 nike

我正在尝试在 .sql 文件中定义变量,以便我可以在我的 sql 语句中使用它们。但是我对这些变量的定义方式感到非常困惑,而且我什至找不到一个很好的在线资源来清楚地解释这一切。我遵循不同来源的建议,但在“Oracle SQL Developer”中不断出现编译错误。这是我的两个问题:

问题一: 貌似可以通过以下两种方式来定义变量。这两种方式有什么区别,我可以同时使用吗?

define first_name = Joe;
select * from customer where name = '&firstname';

variable first_name CHAR;
exec :first_name:= 'Joe';
select * from customer where name = :firstname;

问题2:在第一种方法(即使用define命令)中,我是否可以定义一个类型为number的变量,如果可以,我该如何做?

最佳答案

您可以毫无问题地定义 NUMBER 个变量:

SQL> VARIABLE myNum NUMBER;
SQL> EXEC :myNum := 123.456;

PL/SQL procedure successfully completed.

SQL> print myNum;

MYNUM
----------
123.456

还支持许多其他类型。下面是来自 VARIABLE 命令的 USAGE 帮助文本:

Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | BLOB | BFILE
REFCURSOR | BINARY_FLOAT | BINARY_DOUBLE ] ]

如果您只键入 VARIABLE(或只是 VAR),SQL*Plus 将列出所有变量及其值。

附录:对比原题中的两种变量赋值方式。

当你这样做时......

define first_name = Joe
select * from customer where name = '&first_name';

... 它更像是 C/C++ 中的 #define。您不能将其视为变量;它只是每次 SQL*Plus 看到 &first_name 时粘贴的文本。

当你这样做时......

variable first_name CHAR;
exec :first_name:= 'Joe';
select * from customer where name = :first_name;

您正在创建一个可以操纵的真实变量。

请注意,如果您在定义中使用 CHAR(没有大小),第一个赋值将决定它的大小,之后您不能让它更长。如果您将其定义为 CHAR(50),它将始终为 50 个字符长并用空格填充。这可能会造成混淆,因此在大多数情况下,我建议对字符串使用 VARCHAR2

关于sql - 在 .sql 脚本中定义和使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15691582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com