{"id":8181,"date":"2018-03-11T18:51:46","date_gmt":"2018-03-11T17:51:46","guid":{"rendered":"https:\/\/www.salvis.com\/blog\/?p=8181"},"modified":"2023-11-08T01:19:17","modified_gmt":"2023-11-08T00:19:17","slug":"pl-sql-cop-for-sonarqube-7-0","status":"publish","type":"post","link":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/","title":{"rendered":"PL\/SQL Cop for SonarQube 7.0"},"content":{"rendered":"\n<p>For the last two months, my Trivadis colleague Daniel Schutzbach and I have been working on the <a href=\"https:\/\/www.salvis.com\/blog\/plsql-cop-for-sonarqube\/\">PL\/SQL Cop plugin for SonarQube<\/a>. The goal was to support the most recent SonarQube versions 5.6 LTS, 6.7 LTS and 7.0. Dani was doing the heavy lifting and my job was testing and minor bug fixing. Today I can proudly announce that we were successful and that we have released the following three plugins:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PL\/SQL Cop for SonarQube 4.5 LTS (tested with SonarQube 4.5, 4.5.7 and 5.1.2)<\/li>\n\n\n\n<li>PL\/SQL Cop for SonarQube 5.6 LTS (tested with SonarQube 5.6, 5.6.7, 6.0, 6.1, 6.2, 6.3, 6.3.1, 6.4, 6.5 and 6.6)<\/li>\n\n\n\n<li>PL\/SQL Cop for SonarQube 6.7 LTS (tested with SonarQube 6.7, 6.7.1, 6.7.2 and 7.0)<\/li>\n<\/ul>\n\n\n\n<p>In this blog post, I show how to set up a new SonarQube 7.0 server using Docker and analyze a PL\/SQL project on my local machine with\u00a0SonarQube Scanner. This post is a stripped-down version of my <a href=\"https:\/\/www.salvis.com\/blog\/2017\/09\/24\/continuous-code-quality-for-plsql-with-docker\/\">Continuous Code Quality for PL\/SQL with Docker<\/a>\u00a0post. I assume you know about Docker and have it installed on your machine.<\/p>\n\n\n\n<p>Here is the table of contents of the major steps.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"#create_sonarqube_container\">Create SonarQube Container<\/a><\/li>\n\n\n\n<li><a href=\"#install_plsql_cop_for_sonarqube\">Install PL\/SQL Cop for SonarQube<\/a><\/li>\n\n\n\n<li><a href=\"#install_plsql_cop\">Install PL\/SQL Cop (Command Line Utility)<\/a><\/li>\n\n\n\n<li><a href=\"#install_sonarqube_scanner\">Install SonarQube Scanner<\/a><\/li>\n\n\n\n<li><a href=\"#configure_sonarqube\">Configure SonarQube<\/a><\/li>\n\n\n\n<li><a href=\"#analyze_plsql_project\">Analyze a PL\/SQL Project<\/a><\/li>\n\n\n\n<li><a href=\"#view_result_in_sonarqube\">View the Result in SonarQube<\/a><\/li>\n\n\n\n<li><a href=\"#summary\">Summary<\/a><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"create_sonarqube_container\"><\/a>1. Create a SonarQube Container<\/h2>\n\n\n\n<p>In this step, I create a standalone container for SonarQube 7.0 using defaults to keep it simple.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"docker run -d --name sq7 -p 9000:9000 sonarqube:7.0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">docker<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">run<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">-d<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">--name<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">sq7<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">-p<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">9000<\/span><span style=\"color: #CE9178\">:9000<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">sonarqube:7.0<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"install_plsql_cop_for_sonarqube\"><\/a>2. Install PL\/SQL Cop for SonarQube<\/h2>\n\n\n\n<p>To install the current version of PL\/SQL Cop for SonarQube within the &#8220;sq7&#8221; container run<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"docker exec sq7 wget --no-check-certificate \\\n   https:\/\/www.salvis.com\/blog?ddownload=8167 \\\n   -O \/opt\/sonarqube\/extensions\/plugins\/sonar-plsql-cop-plugin-6.7.0.0.jar\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">docker<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">exec<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">sq7<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">wget<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">--no-check-certificate<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #D7BA7D\">\\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #CE9178\">https:\/\/www.salvis.com\/blog?ddownload=<\/span><span style=\"color: #B5CEA8\">8167<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #D7BA7D\">\\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">-O<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">\/opt\/sonarqube\/extensions\/plugins\/sonar-plsql-cop-plugin-6.7.0.0.jar<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The wget command will be executed within the &#8220;sq7&#8221; container.&nbsp;Windows user have to replace the &#8220;\\&#8221; with &#8220;^&#8221; when using CMD or with &#8220;`&#8221; when using PowerShell.<\/p>\n\n\n\n<p>To load the plugin we need to restart the container.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"docker restart sq7\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">docker<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">restart<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">sq7<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>We will complete the installation in step 5.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"install_plsql_cop\"><\/a>3. Install PL\/SQL Cop (Command Line Utility)<\/h2>\n\n\n\n<p>Download <a href=\"https:\/\/www.salvis.com\/blog\/plsql-cop\/\">PL\/SQL Cop<\/a>&nbsp;and unzip the downloaded file in a directory of your choice. I&#8217;ve installed it on my local machine in &#8220;<span class=\"s1\">\/usr\/local\/bin\/tvdcc&#8221;.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"install_sonarqube_scanner\"><\/a>4. Install SonarQube Scanner<\/h2>\n\n\n\n<p>Download <a href=\"https:\/\/docs.sonarqube.org\/display\/SCAN\/Analyzing+with+SonarQube+Scanner\">SonarQube Scanner<\/a>&nbsp;and unzip the downloaded file in a directory of your choice. I&#8217;ve installed it on my local machine in &#8220;\/usr\/local\/opt\/sonar-scanner<span class=\"s1\">&#8220;.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"configure_sonarqube\"><\/a>5. Configure SonarQube 7.0<\/h2>\n\n\n\n<p>Open &#8220;http:\/\/localhost:9000&#8221; in your web browser and log in with username &#8220;admin&#8221; and password &#8220;admin&#8221;.<\/p>\n\n\n\n<p>SonarQube asks you to provide a token name. Enter &#8220;cop&#8221; and press &#8220;Generate&#8221; and then &#8220;Continue&#8221; on the next page. Then the token name and the token will be shown in the upper right corner of the screen as follows:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_5.png\" alt=\"\" class=\"wp-image-8189\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_5.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_5-300x225.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_5-768x576.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_5-195x146.png 195w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_5-50x38.png 50w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_5-100x75.png 100w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Copy your token text (39d483241393ddd5600e9c9348ced410c7903c1a) to the clipboard and store it somewhere. We will need it in step 6. Press &#8220;Skip this tutorial&#8221; in the upper right corner.<\/p>\n\n\n\n<p>Click on &#8220;Administration&#8221; and the Category &#8220;Trivadis PL\/SQL Cop&#8221; and change the &#8220;Path to PL\/SQL Cop command line tvdcc executable&#8221; to the path according to step 3. In my case this is &#8220;\/usr\/local\/bin\/tvdcc\/tvdcc.sh&#8221;. Press &#8220;Save&#8221; and you are done.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1479\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_6.png\" alt=\"\" class=\"wp-image-8190\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_6.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_6-208x300.png 208w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_6-768x1109.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_6-709x1024.png 709w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_6-101x146.png 101w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_6-35x50.png 35w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_6-52x75.png 52w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"analyze_plsql_project\"><\/a>6. Analyze a PL\/SQL Project<\/h2>\n\n\n\n<p>Create a temporary directory (in my case &#8220;\/Users\/phs\/demo&#8221; and type the following<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"git clone https:\/\/github.com\/PhilippSalvisberg\/plscope-utils.git\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">git<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">clone<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">https:\/\/github.com\/PhilippSalvisberg\/plscope-utils.git<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>This will clone the <a href=\"https:\/\/github.com\/PhilippSalvisberg\/plscope-utils\">plscope-utils<\/a> git repository. If you do not have Git installed you may <a href=\"https:\/\/github.com\/PhilippSalvisberg\/plscope-utils\/archive\/main.zip\">download<\/a> the repository as a zip file and extract it.<\/p>\n\n\n\n<p>Run the following command to analyze the PL\/SQL packages of this project:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"cd plscope-utils\/database\/utils\/package\nsonar-scanner \\\n   -Dsonar.projectKey=plscope-utils:main \\\n   -Dsonar.sources=. \\\n   -Dsonar.login=39d483241393ddd5600e9c9348ced410c7903c1a\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">cd<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">plscope-utils\/database\/utils\/package<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">sonar-scanner<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #D7BA7D\">\\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">-Dsonar.projectKey=plscope-utils:main<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #D7BA7D\">\\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">-Dsonar.sources=.<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #D7BA7D\">\\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">-Dsonar.login=39d483241393ddd5600e9c9348ced410c7903c1a<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Windows users have to replace the &#8220;\\&#8221; with &#8220;^&#8221; when using CMD or with &#8220;`&#8221; when using PowerShell.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"view_result_in_sonarqube\"><\/a>7. View the Result in SonarQube<\/h2>\n\n\n\n<p>Open &#8220;http:\/\/localhost:9000&#8221; in your web browser.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_8.png\" alt=\"\" class=\"wp-image-8197\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_8.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_8-300x225.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_8-768x576.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_8-195x146.png 195w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_8-50x38.png 50w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_8-100x75.png 100w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Click on &#8220;plscope-utils:main&#8221;, &nbsp;select the &#8220;Issues&#8221; tab for this project and select all rules.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_10.png\" alt=\"\" class=\"wp-image-8199\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_10.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_10-300x225.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_10-768x576.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_10-195x146.png 195w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_10-50x38.png 50w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_10-100x75.png 100w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Click on an issue to see the source code line causing this issue.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_11.png\" alt=\"\" class=\"wp-image-8201\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_11.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_11-300x225.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_11-768x576.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_11-195x146.png 195w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_11-50x38.png 50w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sq7_11-100x75.png 100w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><a name=\"summary\"><\/a>8. Summary<\/h2>\n\n\n\n<p>Setting up a SonarQube 7.0 server with Docker is no big deal. Installing the PL\/SQL Cop plugin is simple as well. However, I have only shown the minimum configuration. For real projects, you will spend some time configuring your quality profiles and quality gates. A CI environment might help you to implement a fast quality feedback loop.<\/p>\n\n\n\n<p>The audio-less video summarizes the major installation and configuration steps. I hope this will encourage you to try PL\/SQL Cop.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/SonarQube7Installation.mp4\"><\/video><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>For the last two months, my Trivadis colleague Daniel Schutzbach and I have been working on the PL\/SQL Cop plugin for SonarQube. The goal was to support the most recent SonarQube versions 5.6 LTS, 6.7 LTS and 7.0. Dani was doing the heavy lifting and my job was testing and minor bug<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":9528,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[86,99,13,92,91],"class_list":["post-8181","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","tag-code-analysis","tag-docker","tag-plsql","tag-plsql-cop","tag-sonarqube"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PL\/SQL Cop for SonarQube 7.0 - Philipp Salvisberg&#039;s Blog<\/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:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PL\/SQL Cop for SonarQube 7.0 - Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"For the last two months, my Trivadis colleague Daniel Schutzbach and I have been working on the PL\/SQL Cop plugin for SonarQube. The goal was to support the most recent SonarQube versions 5.6 LTS, 6.7 LTS and 7.0. Dani was doing the heavy lifting and my job was testing and minor bug [\u2026]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/\" \/>\n<meta property=\"og:site_name\" content=\"Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-11T17:51:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-08T00:19:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sonarqube.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"450\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Philipp Salvisberg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:site\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Philipp Salvisberg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/\"},\"author\":{\"name\":\"Philipp Salvisberg\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"headline\":\"PL\\\/SQL Cop for SonarQube 7.0\",\"datePublished\":\"2018-03-11T17:51:46+00:00\",\"dateModified\":\"2023-11-08T00:19:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/\"},\"wordCount\":687,\"commentCount\":8,\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/sonarqube.jpg\",\"keywords\":[\"Code Analysis\",\"Docker\",\"PL\\\/SQL\",\"PL\\\/SQL Cop\",\"SonarQube\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/\",\"name\":\"PL\\\/SQL Cop for SonarQube 7.0 - Philipp Salvisberg&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/sonarqube.jpg\",\"datePublished\":\"2018-03-11T17:51:46+00:00\",\"dateModified\":\"2023-11-08T00:19:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/sonarqube.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/sonarqube.jpg\",\"width\":600,\"height\":450},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2018\\\/03\\\/11\\\/pl-sql-cop-for-sonarqube-7-0\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PL\\\/SQL Cop for SonarQube 7.0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"name\":\"Philipp Salvisberg&#039;s Blog\",\"description\":\"Database-centric development\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\",\"name\":\"Philipp Salvisberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"width\":400,\"height\":400,\"caption\":\"Philipp Salvisberg\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.salvis.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PL\/SQL Cop for SonarQube 7.0 - Philipp Salvisberg&#039;s Blog","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:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/","og_locale":"en_US","og_type":"article","og_title":"PL\/SQL Cop for SonarQube 7.0 - Philipp Salvisberg&#039;s Blog","og_description":"For the last two months, my Trivadis colleague Daniel Schutzbach and I have been working on the PL\/SQL Cop plugin for SonarQube. The goal was to support the most recent SonarQube versions 5.6 LTS, 6.7 LTS and 7.0. Dani was doing the heavy lifting and my job was testing and minor bug [\u2026]","og_url":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/","og_site_name":"Philipp Salvisberg&#039;s Blog","article_published_time":"2018-03-11T17:51:46+00:00","article_modified_time":"2023-11-08T00:19:17+00:00","og_image":[{"width":600,"height":450,"url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sonarqube.jpg","type":"image\/jpeg"}],"author":"Philipp Salvisberg","twitter_card":"summary_large_image","twitter_creator":"@phsalvisberg","twitter_site":"@phsalvisberg","twitter_misc":{"Written by":"Philipp Salvisberg","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/#article","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/"},"author":{"name":"Philipp Salvisberg","@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"headline":"PL\/SQL Cop for SonarQube 7.0","datePublished":"2018-03-11T17:51:46+00:00","dateModified":"2023-11-08T00:19:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/"},"wordCount":687,"commentCount":8,"publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sonarqube.jpg","keywords":["Code Analysis","Docker","PL\/SQL","PL\/SQL Cop","SonarQube"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/","url":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/","name":"PL\/SQL Cop for SonarQube 7.0 - Philipp Salvisberg&#039;s Blog","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/#primaryimage"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sonarqube.jpg","datePublished":"2018-03-11T17:51:46+00:00","dateModified":"2023-11-08T00:19:17+00:00","breadcrumb":{"@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/#primaryimage","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sonarqube.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2018\/03\/sonarqube.jpg","width":600,"height":450},{"@type":"BreadcrumbList","@id":"https:\/\/www.salvis.com\/blog\/2018\/03\/11\/pl-sql-cop-for-sonarqube-7-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.salvis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PL\/SQL Cop for SonarQube 7.0"}]},{"@type":"WebSite","@id":"https:\/\/www.salvis.com\/blog\/#website","url":"https:\/\/www.salvis.com\/blog\/","name":"Philipp Salvisberg&#039;s Blog","description":"Database-centric development","publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.salvis.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515","name":"Philipp Salvisberg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","width":400,"height":400,"caption":"Philipp Salvisberg"},"logo":{"@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg"},"sameAs":["http:\/\/www.salvis.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/8181","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/comments?post=8181"}],"version-history":[{"count":28,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/8181\/revisions"}],"predecessor-version":[{"id":12910,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/8181\/revisions\/12910"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media\/9528"}],"wp:attachment":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media?parent=8181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/categories?post=8181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/tags?post=8181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}