Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g 如何在select的何处使用declare变量?_Oracle11g - Fatal编程技术网

Oracle11g 如何在select的何处使用declare变量?

Oracle11g 如何在select的何处使用declare变量?,oracle11g,Oracle11g,如何在select的何处使用declare变量 CREATE TABLE student ( id smallint PRIMARY KEY, first_name VARCHAR(80) NOT NULL, last_name VARCHAR(80) NOT NULL); insert into student VALUES(10,'AA','A01'); insert into student VALUES(30,'BB','B01'); --MSSQL OK declare

如何在select的何处使用declare变量

CREATE TABLE student (
  id smallint PRIMARY KEY,
  first_name VARCHAR(80) NOT NULL,
  last_name VARCHAR(80) NOT NULL);

insert into student VALUES(10,'AA','A01');
insert into student VALUES(30,'BB','B01');
--MSSQL OK

declare @v_first  varchar(10);
set @v_first='AA';
select * from student where first_name=@v_first;
--甲骨文错误

declare v_first varchar2(10);
BEGIN
  v_first :='AA';
  select * from student where first_name= v_first;
END;
--=>消息

ORA-06550:第4行第3列: PLS-00428:在此 选择敘述句中預期會出現一個 进入子句 655000000-行%s,列%s:\n%s *原因:通常是PL/SQL编译错误。
*操作:

您为MSSQL提供的示例是一个不同的表,但假设用户列表中的部门ID也是一个数字。。。SQL将自动转换字符串以进行比较

您需要将id转换为一个数字。在将varchar变量与数字进行比较之前声明varchar变量有什么原因吗

 declare v_id varchar2(2);
    BEGIN
      v_id :='30';
      select * from student where id= TO_NUMBER(v_id);    
    END;
或者更改声明和赋值

declare v_id NUMBER;
BEGIN
  v_id :=30;
  select * from student where id= v_id;

END;
基本上,我在下面的评论中添加的链接是这样说的。。来自用户tvm。。在PL/SQL中不能使用SELECT WITH INTO子句。SELECT的输出必须存储在某个位置。表、变量或记录。请参阅下面的示例,了解如何将SELECT语句的结果存储到记录中

DECLARE
  v_id number; 
  v_result Student%ROWTYPE;
BEGIN 
  v_id := 30; 

    SELECT * INTO v_result
    FROM Student
    WHERE id = v_id;
END; 

然后你需要对v_结果做点什么。。。显示的另一个选项是直接调用SQL—这取决于您如何调用和使用数据。

Whew—我已经有一段时间没有使用Oracle了,所以我必须查看。。。我找到了其他问题和答案供您查看-因为我不知道您是如何尝试在oracle中调用此查询的,也不知道您想对结果做什么,它解释了为什么这对您不起作用,以及您可以如何使用它。亲爱的:谢谢你的帮助。我使用MSSQL,当我尝试创建一个proc时,我会一步一步地尝试,所以我想看看where xx=变量的结果。所以在Oracle中,我必须在v_结果中使用,但是如何直接显示v_结果呢?我必须开始学习racle,所以他们有很多我无法发现的地方。Thx和学生%ROWTYPE只能调整1个结果?我发现,我必须使用DBMS|u OUTPUT.put_linev|u result.first|u name | v|u result.last|u name;要逐个获取列,我可以使用select获取它们吗?您可以将它们选择到单独的变量中,因此从学生中选择first_name、last_name到v_first_name、v_last_name。。。等你看过我在第一条评论中提供的链接了吗?回到另一个问题和伟大的答案?通读评论和答案-给你一些方法和链接