如何在oracle中使用动态sql创建记录类型?

时间:2017-07-11 14:36:37

标签: oracle collections plsql record dynamic-sql

我有一个名为a的表,列为x。

TYPE rc IS RECORD ( p o.p%type,
                    q o.q%type,  
                    r o.r%type);

现在我想基于上面的sql动态创建一个记录类型,即

  Imports System.Text.RegularExpressions

  Module globalmodule

   Public conn As New ADODB.Connection
   Public rs As New ADODB.Recordset
   Public rss As New ADODB.Recordset
   Public trs As New ADODB.Recordset
   Public sql As String

Public Function Opendb()
    If conn.State = 1 Then conn.Close()
    conn.Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=dbEmployee;Data Source=TECHNOPU\SQL;")
    Return 0
End Function
Function EmailAddressCheck(ByVal emailAddress As String) As Boolean

    Dim pattern As String = "^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"
    Dim emailAddressMatch As Match = Regex.Match(emailAddress, pattern)
    If emailAddressMatch.Success Then
        EmailAddressCheck = True
    Else
        EmailAddressCheck = False
    End If
    If EmailAddressCheck = False Then
        MsgBox("Entervalid E-mail ID")
    End If

End Function


Public empid As String


 End Module

请告诉我如何在运行时创建上述记录。

如果不可能,请建议任何解决方法。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果您只想在代码中使用此表的记录而不需要创建类型,则可以将行类型变量声明为下面的

CREATE TABLE xx_emp (emp_id NUMBER, emp_name VARCHAR2(100));

DECLARE

  l_emp_type  xx_emp%ROWTYPE;

BEGIN

  l_emp_type.emp_id   := 10;
  l_emp_type.emp_name := 'JOE';

END;

答案 1 :(得分:0)

当您对之前的回答发表评论时,我将假设“dinamically”您希望根据可能包含联接的查询创建它,

您可以将光标用作下面的

  DECLARE
  -- here you declare a cursor named c_cursor_name
  CURSOR c_cursor_name IS SELECT a.emp_name  
                               , b.dept_name 
                            FROM xx_emp  a
                               , xx_Dept b
                           WHERE a.dept_id = b.dept_id;

  -- here you can declare your record based on your cursor
  r_recors_type   c_cursor_name%ROWTYPE;

BEGIN

  -- now you can fill your cursor as you want
  r_recors_type.emp_name := 'JOE';
  r_recors_type.dept_name := 'Marketing';


END;
相关问题