创建存储的选择过程oracle 11g

时间:2020-03-02 16:39:05

标签: oracle stored-procedures plsql oracle11g

每个人,我都有一个oracle 11g数据库,我想创建一个存储过程,该存储过程在某些视图和表之间返回一个select语句,如下所示:

CREATE OR REPLACE PROCEDURE schemaName.my_PROC_name (p1 in number(10))
as 
begin 
select v.*,(select column1 from table t where t.id=p1) from view v ;
end my_PROC_name ;

并且它不起作用,我对oracle DB不熟悉,因此请帮忙!

1 个答案:

答案 0 :(得分:0)

  • 如果要从多个数据源中检索列(例如 作为表格或视图),您最好在其中使用连接子句 而不是使用子查询,在子查询中可能会出现$name=$_SESSION['name']; $m = new MongoClient(); //echo "Connection to database successfully <br>"; $db = $m->SAHC; //echo "Database mydb selected <br>"; $collection = $db->upload_files; //echo "Collection selected successfully <br>"; $document = array("usrName"=>$name); $cursor=$collection->find($document); session_start(); // iterate cursor to display title of documents echo "<table width='auto' style='border-collapse: separate; border-spacing: 20px' ><tr>"; foreach ($cursor as $document) { echo "<td >"; $value=$document["fileName"]; $value2=$document["uploadSize"]; $_SESSION['rootFolder']=$value; echo '<input type="image" src="images/file2.png" value="'.$value2.'" class="btTxt submit" width="85" onclick="myfunc(this.value)"><b>'.$value . "</b>"; echo "</td>"; } echo "</tr></table>"; ?> 错误。
  • 在定义期间不允许数据类型的精度 过程,函数或程序包的参数。 (将single subquery returns more than one row替换为p1 in number(10)
  • p1 numberview是保留关键字,不允许将它们 在创建它们时使用。
  • 您需要将查询中的值返回到一些变量。 为此,需要table子句,而into类型 需要参数才能将其从此类编程中删除 单位
  • 使用out(默认值)进行变量声明,并使用以下过程 in子句之后的名称是多余的。要指定元素类型,请使用end尽可能多地提供变量或数据库列的数据类型,而不是指定独立的数据类型。
  • 有时,您可能无法检索所需的数据, 忘记为这些查询添加异常处理 遇到错误消息的情况。

因此,您的情况可能考虑以下代码块:

%TYPE

,您可以按以下方式执行该过程

CREATE OR REPLACE PROCEDURE my_PROC_name(  
                                          i_p1       NUMBER, 
                                          o_col0 OUT myview.col0%type, 
                                          o_col1 OUT mytable.column1%type 
                                        ) AS
BEGIN
    SELECT v.col0, t.column1 
      INTO o_col0, o_col1
      FROM myview v
      LEFT JOIN mytable t 
        ON v.id = t.v_id
     WHERE t.id = i_p1;
   EXCEPTION WHEN no_data_found THEN null;
             WHEN too_many_rows THEN null;      
END;
/
相关问题