Sql 在Oracle中创建过程以创建视图

Sql 在Oracle中创建过程以创建视图,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我试图在oracle中创建一个过程,从PL SQL块调用该过程时,将在数据库中创建一个视图,我将从中查询报表数据。我是Oracle的新手,需要有关此代码的帮助 CREATE OR REPLACE PROCEDURE CREATE_VIEW ( TO_DT IN Date ) AS BEGIN Create or Replace view BORR_DUR As SELECT e."Deal_No", (Select "DeskName" From MM_S_DESK Where

我试图在oracle中创建一个过程,从PL SQL块调用该过程时,将在数据库中创建一个视图,我将从中查询报表数据。我是Oracle的新手,需要有关此代码的帮助

CREATE OR REPLACE PROCEDURE CREATE_VIEW 
(
  TO_DT IN Date 
) AS 
BEGIN
  Create or Replace view BORR_DUR As
  SELECT e."Deal_No", (Select "DeskName" From MM_S_DESK Where e."DeskCode" = MM_S_DESK."DeskCode") Facility, e."Remarks" Counterparty, 
m."MaturityDate", m."PriRedem" Principal, 

(select MAX("INTEREST_RATE") from MM_BOR_PLA_PAR d 
WHERE e."Deal_No" = d."DEAL_NO" and "INTERESTINPUTDATE" <= to_dt)/100 yield, (m."MaturityDate" - To_date(to_dt,'dd/mm/yyyy')) Days_to_Mat,
Round(((m."MaturityDate" - To_date(to_dt,'dd/mm/yyyy'))/365)/ (1+((select MAX("INTEREST_RATE") from MM_BOR_PLA_PAR d 
WHERE e."Deal_No" = d."DEAL_NO" and "INTERESTINPUTDATE" <= to_dt)/100)),4) MDURATION


FROM MM_T_BORROWING e, MM_T_BORROWING_PM_DETAIL m
Where e."DeskCode" in ('10','11','12','13') and e."Value_Date" <= to_dt and e."Maturity_Date" > to_dt and e."Status" not in ('C', 'D', 'Z', '0','X') 
and e."Deal_No" = m."Deal_No" and "PriRedem" > '0' and m."MaturityDate" > to_dt;

END CREATE_VIEW;
在编译时,我得到了PLS00103错误,它说

应为下列之一时遇到创建符号: 以下


我们将非常感谢您对解决此问题的任何帮助。

当您想要执行动态SQL语句时,您必须使用execute IMMEDIATE语句

首先,您不需要在字段名称中使用双引号,然后您可以尝试查询视图并检查它是否运行正常

将创建替换视图。。。变量和过程调用中的语句:

BEGIN
   EXECUTE IMMEDIATE view_string_variable ;
END;
/

当您想要执行动态SQL语句时,必须使用execute IMMEDIATE语句

首先,您不需要在字段名称中使用双引号,然后您可以尝试查询视图并检查它是否运行正常

将创建替换视图。。。变量和过程调用中的语句:

BEGIN
   EXECUTE IMMEDIATE view_string_variable ;
END;
/

您需要执行类似EXECUTE IMMEDIATE“CREATE or REPLACE…”的操作,整个语句都在EXECUTE IMMEDIATE中。为什么要这样做?编写一个过程而不仅仅是运行CREATE VIEW语句会有什么好处?我也希望运行一个语句,但是发现直接在PL SQL中运行很困难,在6i中无法使用Execute Immediate,简单的execute或execute查询对我来说不起作用。您需要执行类似execute IMMEDIATE“CREATE or REPLACE…”的操作,整个语句都在execute IMMEDIATE中。为什么要这样做?编写过程而不仅仅是运行CREATE VIEW语句会有什么好处?我也希望运行语句,但发现直接在PL SQL中运行很困难,Execute Immediate在6i中不可用,简单的Execute或Execute query对我来说不起作用。创建视图的查询工作得很好,并且可以完成所需的工作。当我把语句放在变量中作为“view_string_variable”创建或替换view Borr_Dur as…”时,我得到了这个错误,Error11,22:PLS-00103:在预期以下情况之一时遇到符号:常量异常表长双参考字符时间戳间隔日期二进制国家字符NCharo您的sintax ErrorPharentsis需要的一个字符就在这里感兴趣PutDate这正是我的问题所在,我尝试了一个简单的查询,它工作了,其他一切都很好,除了我在查询中以字符串形式传递值,而查询本身则以字符串形式传递。因此,诸如“10”、“11”等值无法编译。我试着用双引号代替单引号,但是没有用。但是为什么你需要数字引号呢?它们是否声明为varchar?如果没有从解决的问题中删除引号,我实际上不得不使用,即单引号按下两次,而我使用的是双引号,这造成了问题。谢谢你的帮助,弗兰克。真的很感激。创建视图的查询工作得非常完美,可以完成所需的操作。当我把语句放在变量中作为“view_string_variable”创建或替换view Borr_Dur as…”时,我得到了这个错误,Error11,22:PLS-00103:在预期以下情况之一时遇到符号:常量异常表长双参考字符时间戳间隔日期二进制国家字符NCharo您的sintax ErrorPharentsis需要的一个字符就在这里感兴趣PutDate这正是我的问题所在,我尝试了一个简单的查询,它工作了,其他一切都很好,除了我在查询中以字符串形式传递值,而查询本身则以字符串形式传递。因此,诸如“10”、“11”等值无法编译。我试着用双引号代替单引号,但是没有用。但是为什么你需要数字引号呢?它们是否声明为varchar?如果没有从解决的问题中删除引号,我实际上不得不使用,即单引号按下两次,而我使用的是双引号,这造成了问题。谢谢你的帮助,弗兰克。非常感谢。