{"id":1719,"date":"2011-09-28T12:21:10","date_gmt":"2011-09-28T17:21:10","guid":{"rendered":"http:\/\/blog.vortexbird.com\/?p=1115"},"modified":"2011-09-28T12:21:10","modified_gmt":"2011-09-28T17:21:10","slug":"llamar-procedimiento-almacenado-en-oracle-desde-jdbc","status":"publish","type":"post","link":"https:\/\/vortexbird.com\/en\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/","title":{"rendered":"Llamar procedimiento almacenado en Oracle desde JDBC"},"content":{"rendered":"<p style=\"text-align: justify;\">Hola.<\/p>\n<p style=\"text-align: justify;\">En este<em> post\u00a0<\/em> encontrar\u00e1s c\u00f3mo llamar un procedimiento almacenado hecho en PL\/SQL.<\/p>\n<p style=\"text-align: justify;\">Cuando se desarrollan aplicaciones empresariales es muy com\u00fan que la l\u00f3gica de negocio se encuentre desarrollada en pl\/sql, es una buena estrategia lanzar excepciones cuando se encuentra un error de l\u00f3gica de negocio en el procedimiento almacenado.<\/p>\n<p style=\"text-align: justify;\">Dicha <em>execption<\/em> debe enviar el mensaje de error para que este sea capturado en Java y tratada en el componente\u00a0que hace el llamado al procedimiento almacenado.<\/p>\n<p style=\"text-align: justify;\">En una aplicaci\u00f3n web se deber\u00eda mostrar el mensaje de la excepci\u00f3n lanzada por el componente de l\u00f3gica de negocio desarrollado en pl\/sql. C\u00f3digo del procedimiento almacenado en pl\/sql. Este procedimiento lanza una <em>exception<\/em> si se env\u00eda un valor num\u00e9rico diferente de 1,\u00a0 la <em>exception<\/em> puede ser tratada en el bloque de c\u00f3digo <em>catch<\/em> en Java.<\/p>\n<pre lang=\"xml\" escaped=\"true\">\ncreate or replace Procedure ProGetPrueba1(prfCursor out Sys_Refcursor,pnNumber  In Number)  Is\n   voCursor  Sys_Refcursor:=null;\n Begin\n      --Valor 1: funciona OK, Valor diferente a 1 retorna error.\n      if  pnNumber = 1 then\n              Open voCursor For\n              Select 1 as CODIGO,'Vortexbird' as NOMBRE\n              From   DUAL;\n              prfCursor:=voCursor;\n      else\n           RAISE_APPLICATION_ERROR (-20000, 'El valor no puede ser negativo'); --voCursor;\n      end if;\n End ProGetPrueba1;\n<\/pre>\n<p style=\"text-align: justify;\">C\u00f3digo Java para hacer el llamado al procedimiento almacenado.<\/p>\n<pre lang=\"xml\" escaped=\"true\">\npackage com.vortexbird.demo.test;\n  \nimport java.sql.CallableStatement;\nimport java.sql.Connection; \nimport java.sql.DriverManager; \nimport java.sql.ResultSet; \nimport java.sql.SQLException;  \nimport oracle.jdbc.OracleTypes;  \n\n\/**  * @author dgomez@vortexbird.com\n  *\/ \npublic class TestStore {\n  \tpublic static void main(String[] args) {\n  \t\tString url=\"jdbc:oracle:thin:@127.0.0.1:1521:xe\";\n \t\tString user=\"banco\";\n \t\tString password=\"banco\";\n  \t\t\ttry {\n \t\t\t\tClass.forName(\"oracle.jdbc.driver.OracleDriver\");\n \t\t\t\tConnection connection=DriverManager.getConnection(url,user,password);\n\n \t\t\t\t\/\/LLamado del procedimiento al estilo pl\/sql\n \t\t\t\tString sql=\"begin ProGetPrueba1(?,?); end;\";\n  \t\t\t\tCallableStatement callableStatement=connection.prepareCall(sql);\n\n  \t\t\t\t\/\/Parametros de entrada\n \t\t\t\tcallableStatement.registerOutParameter(1, OracleTypes.CURSOR);\n \t\t\t\tcallableStatement.setLong(2, 1L);\n  \t\t\t\tcallableStatement.execute();\n\n \t\t\t\t\/\/Se obtiene el cursor en forma de ResultSe \n\t\t\t\tResultSet rs = (ResultSet)callableStatement.getObject(1);\n \t\t\t\twhile (rs.next()){\n \t\t\t\t\tSystem.out.println(rs.getLong(\"CODIGO\"));\n \t\t\t\t\tSystem.out.println(rs.getString(\"NOMBRE\"));\n \t\t\t\t} \t\t\t\trs.close();\n \t\t\t\tcallableStatement.close();\n \t\t\t\tconnection.close();\n \t\t\t} catch (ClassNotFoundException e) {\n \t\t\t\te.printStackTrace();\n \t\t\t} catch (SQLException e) {\n \t\t\t\t\/\/Imprime el mensaje de la exception lanzada en pl\/sql si el valor es diferente de 1\n \t\t\t\te.printStackTrace();\n \t\t\t}\n \t}\n }\n<\/pre>\n<p style=\"text-align: justify;\">Es todo, de esta forma se llama un procedimiento almacenado en escrito en pl\/sql desde Java usando JDBC.<\/p>","protected":false},"excerpt":{"rendered":"<p>Hola. En este post\u00a0 encontrar\u00e1s c\u00f3mo llamar un procedimiento almacenado hecho en PL\/SQL. Cuando se desarrollan aplicaciones empresariales es muy &#8230; <a class=\"cz_readmore cz_readmore_no_icon\" href=\"https:\/\/vortexbird.com\/en\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/\"><span>Read more<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":1758,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[16,7],"tags":[69,70,71,72,73,74,75,76],"class_list":["post-1719","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javase","category-oraclexe","tag-callablestatement","tag-dbc","tag-oracle","tag-oracletypes-cursor","tag-plsql","tag-procedure","tag-raise_application_error","tag-sys_refcursor"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Llamar procedimiento almacenado en Oracle desde JDBC - Vortexbird<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vortexbird.com\/en\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Llamar procedimiento almacenado en Oracle desde JDBC - Vortexbird\" \/>\n<meta property=\"og:description\" content=\"Hola. En este post\u00a0 encontrar\u00e1s c\u00f3mo llamar un procedimiento almacenado hecho en PL\/SQL. Cuando se desarrollan aplicaciones empresariales es muy ... Leer m\u00e1s\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vortexbird.com\/en\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/\" \/>\n<meta property=\"og:site_name\" content=\"Vortexbird\" \/>\n<meta property=\"article:published_time\" content=\"2011-09-28T17:21:10+00:00\" \/>\n<meta name=\"author\" content=\"Vortex.bird\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vortex.bird\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/\"},\"author\":{\"name\":\"Vortex.bird\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#\\\/schema\\\/person\\\/e69cef57e13dc876e812bed5602ce051\"},\"headline\":\"Llamar procedimiento almacenado en Oracle desde JDBC\",\"datePublished\":\"2011-09-28T17:21:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/\"},\"wordCount\":185,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"keywords\":[\"CallableStatement\",\"DBC\",\"Oracle\",\"OracleTypes.CURSOR\",\"pl\\\/sql\",\"Procedure\",\"RAISE_APPLICATION_ERROR\",\"Sys_Refcursor\"],\"articleSection\":[\"JavaSE\",\"OracleXE\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/\",\"url\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/\",\"name\":\"Llamar procedimiento almacenado en Oracle desde JDBC - Vortexbird\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"datePublished\":\"2011-09-28T17:21:10+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#\\\/schema\\\/person\\\/e69cef57e13dc876e812bed5602ce051\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/#primaryimage\",\"url\":\"\",\"contentUrl\":\"\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/vortexbird.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Llamar procedimiento almacenado en Oracle desde JDBC\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#website\",\"url\":\"https:\\\/\\\/vortexbird.com\\\/\",\"name\":\"Vortexbird\",\"description\":\"Desarrollo &aacute;gil de software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vortexbird.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#\\\/schema\\\/person\\\/e69cef57e13dc876e812bed5602ce051\",\"name\":\"Vortex.bird\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g\",\"caption\":\"Vortex.bird\"},\"sameAs\":[\"https:\\\/\\\/vortexbird.com\"],\"url\":\"https:\\\/\\\/vortexbird.com\\\/en\\\/author\\\/vortexbird\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Llamar procedimiento almacenado en Oracle desde JDBC - Vortexbird","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vortexbird.com\/en\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/","og_locale":"en_US","og_type":"article","og_title":"Llamar procedimiento almacenado en Oracle desde JDBC - Vortexbird","og_description":"Hola. En este post\u00a0 encontrar\u00e1s c\u00f3mo llamar un procedimiento almacenado hecho en PL\/SQL. Cuando se desarrollan aplicaciones empresariales es muy ... Leer m\u00e1s","og_url":"https:\/\/vortexbird.com\/en\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/","og_site_name":"Vortexbird","article_published_time":"2011-09-28T17:21:10+00:00","author":"Vortex.bird","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Vortex.bird","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/#article","isPartOf":{"@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/"},"author":{"name":"Vortex.bird","@id":"https:\/\/vortexbird.com\/#\/schema\/person\/e69cef57e13dc876e812bed5602ce051"},"headline":"Llamar procedimiento almacenado en Oracle desde JDBC","datePublished":"2011-09-28T17:21:10+00:00","mainEntityOfPage":{"@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/"},"wordCount":185,"commentCount":0,"image":{"@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/#primaryimage"},"thumbnailUrl":"","keywords":["CallableStatement","DBC","Oracle","OracleTypes.CURSOR","pl\/sql","Procedure","RAISE_APPLICATION_ERROR","Sys_Refcursor"],"articleSection":["JavaSE","OracleXE"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/","url":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/","name":"Llamar procedimiento almacenado en Oracle desde JDBC - Vortexbird","isPartOf":{"@id":"https:\/\/vortexbird.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/#primaryimage"},"image":{"@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/#primaryimage"},"thumbnailUrl":"","datePublished":"2011-09-28T17:21:10+00:00","author":{"@id":"https:\/\/vortexbird.com\/#\/schema\/person\/e69cef57e13dc876e812bed5602ce051"},"breadcrumb":{"@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/#primaryimage","url":"","contentUrl":""},{"@type":"BreadcrumbList","@id":"https:\/\/vortexbird.com\/llamar-procedimiento-almacenado-en-oracle-desde-jdbc\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/vortexbird.com\/"},{"@type":"ListItem","position":2,"name":"Llamar procedimiento almacenado en Oracle desde JDBC"}]},{"@type":"WebSite","@id":"https:\/\/vortexbird.com\/#website","url":"https:\/\/vortexbird.com\/","name":"Vortexbird","description":"Desarrollo &aacute;gil de software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vortexbird.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/vortexbird.com\/#\/schema\/person\/e69cef57e13dc876e812bed5602ce051","name":"Vortex.bird","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g","caption":"Vortex.bird"},"sameAs":["https:\/\/vortexbird.com"],"url":"https:\/\/vortexbird.com\/en\/author\/vortexbird\/"}]}},"_links":{"self":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/posts\/1719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/comments?post=1719"}],"version-history":[{"count":0,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/posts\/1719\/revisions"}],"wp:attachment":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/media?parent=1719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/categories?post=1719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/tags?post=1719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}