Module: PLSQL::ProcedureClassMethods

Included in:
Procedure
Defined in:
lib/plsql/procedure.rb

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#find(schema, procedure_name, package_name = nil, override_schema_name = nil) ⇒ Object



4
5
6
7
8
9
10
# File 'lib/plsql/procedure.rb', line 4

def find(schema, procedure_name, package_name = nil, override_schema_name = nil)
  if package_name
    find_procedure_in_package(schema, package_name, procedure_name, override_schema_name)
  else
    find_procedure_in_schema(schema, procedure_name) || find_procedure_by_synonym(schema, procedure_name)
  end
end

#find_procedure_by_synonym(schema, procedure_name) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/plsql/procedure.rb', line 24

def find_procedure_by_synonym(schema, procedure_name)
  row = schema.select_first(<<-SQL, schema.schema_name, procedure_name.to_s.upcase)
    SELECT p.owner, p.object_name, p.object_id
    FROM   all_synonyms s,
           all_procedures p
    WHERE  s.owner IN (:owner, 'PUBLIC')
    AND    s.synonym_name = :synonym_name
    AND    p.owner        = s.table_owner
    AND    p.object_name  = s.table_name
    AND    p.object_type IN ('PROCEDURE','FUNCTION')
    AND    p.pipelined    = 'NO'
    ORDER BY DECODE(s.owner, 'PUBLIC', 1, 0)
  SQL
  new(schema, row[1], nil, row[0], row[2]) if row
end

#find_procedure_in_package(schema, package_name, procedure_name, override_schema_name = nil) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/plsql/procedure.rb', line 40

def find_procedure_in_package(schema, package_name, procedure_name, override_schema_name = nil)
  schema_name = override_schema_name || schema.schema_name
  row = schema.select_first(<<-SQL, schema_name, package_name, procedure_name.to_s.upcase)
    SELECT o.object_id
    FROM   all_procedures p,
           all_objects o
    WHERE  p.owner       = :owner
    AND    p.object_name = :object_name
    AND    p.procedure_name = :procedure_name
    AND    p.pipelined   = 'NO'
    AND    o.owner       = p.owner
    AND    o.object_name = p.object_name
    AND    o.object_type = 'PACKAGE'
  SQL
  new(schema, procedure_name, package_name, override_schema_name, row[0]) if row
end

#find_procedure_in_schema(schema, procedure_name) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/plsql/procedure.rb', line 12

def find_procedure_in_schema(schema, procedure_name)
  row = schema.select_first(<<-SQL, schema.schema_name, procedure_name.to_s.upcase)
    SELECT object_id
    FROM   all_procedures
    WHERE  owner = :owner
    AND    object_name = :object_name
    AND    object_type IN ('PROCEDURE', 'FUNCTION')
    AND    pipelined = 'NO'
  SQL
  new(schema, procedure_name, nil, nil, row[0]) if row
end