如何在Javascript函数中调用PL / SQL变量?

时间:2015-12-30 17:57:56

标签: javascript oracle google-maps plsql oracle-apex

我想通过在javascript函数中调用pl / sql变量来显示从Oracle数据库中检索的坐标作为Google Map上的标记。这一切都在APEX 5完成。任何帮助将不胜感激!

什么有效:我在GEOMETRY表中选择PHOTO(SDO_GEOMETRY)为l_lng(经度)和l_lat(纬度)变量:

SELECT t.x Longitude,
  t.y Latitude
FROM photo,
  TABLE(sdo_util.getvertices(photo.geometry)) t;

使用DBMS_OUTPUT.put_line(l_lng);DBMS_OUTPUT.put_line(l_lat);,我可以看到l_lngl_lat成功存储了值,因为输出为:

-4.083714
50.315475

具体来说,javascript变量myLatLng需要从l_lngl_lat中提取坐标。

var myLatLng = {lat: l_lat, lng: l_lng};

我的完整代码:

DECLARE

l_lng NUMBER;
l_lat NUMBER;


begin

SELECT t.x Longitude,
  t.y Latitude 
  INTO l_lng, l_lat
FROM photo,
  TABLE(sdo_util.getvertices(photo.geometry)) t
  WHERE photo.id=39;


htp.print('

<html>

<head>
    <style>
        #map {
            width: 500px;
            height: 400px;
        }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js"></script>
    <script>
        function initialize() {

                var myLatLng = {
                    lat: l_lat,
                    lng: l_lng
                };



                var map = new google.maps.Map(document.getElementById("map"), {
                    zoom: 17,
                    center: myLatLng
                });
                var marker = new google.maps.Marker({
                    position: myLatLng,
                    map: map,
                    title: 'Hello World!'
               });
        }



    </script>

</head>

<body>
    <div id="map"></div>
</body>

</html>

');
end;

正如@vmachan所建议的那样,我将我的ht.print语句修改为:

htp.print('<html>');
htp.print('<head>');
htp.print('<style>
    #map {
        width: 500px;
        height: 400px;
        }
    </style>
');

htp.print('<INPUT TYPE="hidden" NAME="p_lng" VALUE="'||l_lng||'">');
htp.print('<INPUT TYPE="hidden" NAME="p_lat" VALUE="'||l_lat||'">');
htp.print(' 

    <script src="https://maps.googleapis.com/maps/api/js"></script>
    <script>
        function initialize() {

                var myLatLng = {
                    lat: p_lat,
                    lng: p_lng
                };



                var map = new google.maps.Map(document.getElementById("map"), {
                    zoom: 17,
                    center: myLatLng
                });
        }
    </script>
');
htp.print('</head>');
htp.print('
    <body>
        <div id="map"></div>
    </body>
');
htp.print('</html>');

2 个答案:

答案 0 :(得分:1)

下面是一个片段,我认为如果应用可行,这是我在之前的评论中试图建议的。

htp.print('<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
    function initialize() {

            var myLatLng = {
                lat: ' || l_lng || ',
                lng: ' || l_lat || '
            };

            var map = new google.maps.Map(document.getElementById("map"), {
                zoom: 17,
                center: myLatLng
            });
    }
</script>');

在发送到htp.print时,您需要在多行上解决字符串continuation,或者只是将整个html连接成一行可能有效但可能不太可读的行。

希望这有帮助。

答案 1 :(得分:0)

您正在输出文本输入元素中的值,而不是javascript变量。编写代码以将输入元素中的值提取到javascript变量中,或者将其输出为javascript以开始。替换:

htp.print('<INPUT TYPE="hidden" NAME="p_lng" VALUE="'||l_lng||'">');
htp.print('<INPUT TYPE="hidden" NAME="p_lat" VALUE="'||l_lat||'">');

htp.print('var p_lng='||l_lng||';');
htp.print('var p_lat='||l_lat||''');